2015-10-06 86 views
0

我有一個問題,我想用junit測試spring數據。我用彈簧數據的JPA使用JUnit 4:春季數據和junit

這是我的測試類

@ContextConfiguration(locations={"classpath*:applicationContext.xml"}) 
    @Transactional 
    @RunWith(SpringJUnit4ClassRunner.class) 
    public class EquipementServiceTest1 { 

     @Autowired 
     IEquipementService equipmentservice; 
     @Before 
     public void setUp() throws Exception { 
      equipmentservice=new EquipementService(); 
     } 

     @Test 
     public void testValidateEquipement() { 
      equipementEntity e =new equipementEntity(); 
      e.setCode("10"); 
      e.setLibelle("yyyy"); 
      equipmentservice.validateEquipement(e); 
     } 

     @Test 
     public void testGetListEquipement() { 
      List<equipementEntity> list=new ArrayList<equipementEntity>(); 
      list= equipmentservice.getListEquipement(); 
       assertEquals(list.size(), 2);`enter code here` 
     } 

     @Service 
    public class EquipementService implements IEquipementService { 

     @Autowired 
     EquipementRepository equipementRepository;`enter code here 

     @Override 
     public List<equipementEntity> getListEquipement() { 
      return equipementRepository.findAll(); 
     } 

我有一個空指針異常 非常感謝你

+0

你究竟在哪裏得到異常? – jny

+0

這是我的日誌顯示java.lang.NullPointerException \t在app.services.equipementEntite.EquipementService.getListEquipement(EquipementService.java:29) \t在app.services.equipementEntite.EquipementServiceTest1.testGetListEquipement(EquipementServiceTest1.java:45) \t在sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法) \t at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) –

回答

1

你有很多東西要放在這裏的。您自動導入EquipmentService但您未指定配置,因此該服務未被自動裝配。即使它是,您可以在setUp方法中重置它。新的equipmentservice沒有存儲庫集,因此NullPointerException可能會在equipmentservice嘗試調用存儲庫時拋出。

這是很容易使用@ContextConfigurationMockito mock對象(我假設儲備庫自動裝配)

  1. 解決爲您測試類添加@ContextConfiguration annontation。
  2. 您的測試
  3. 內添加靜態配置類在配置上做信息庫中的模擬對象

    @Transactional 
    @RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration 
    public class EquipementServiceTest1 { 
         @Autowired 
         IEquipementService equipmentservice; 
         @Before 
         public void setUp() throws Exception { 
          //remove this 
          // equipmentservice=new EquipementService(); 
         } 
    
         @Test 
         public void testValidateEquipement() { 
          equipementEntity e =new equipementEntity(); 
          e.setCode("10"); 
          e.setLibelle("yyyy"); 
          equipmentservice.validateEquipement(e); 
         } 
    
         @Test 
         public void testGetListEquipement() { 
          List<equipementEntity> list=new ArrayList<equipementEntity>(); 
          list= equipmentservice.getListEquipement(); 
           assertEquals(list.size(), 2);`enter code here` 
         } 
    
         @Service 
        public class EquipementService implements IEquipementService { 
    
         @Autowired 
         EquipementRepository equipementRepository;`enter code here 
    
         @Override 
         public List<equipementEntity> getListEquipement() { 
          return equipementRepository.findAll(); 
         } 
        } 
    @Configuration 
    public static class Config { 
    @Bean 
    public IEquipementService equipmentservice { 
        return new equipmentService(); 
    } 
    
    @Bean 
    public EquipmentRepository equipmentRepository { 
        return Mockito.mock(EquimentRepository.class); 
    } 
    
    } 
    

這顯然還沒有被編譯。另外equipmentRepository是一個模擬,所以撥打getListEquipment將返回空列表。例如,如果你想讓它返回一些東西,你可以使用Mockito.when方法來指定它。請不要,這是一個單元測試,它正在測試EquipmentService,而不是EquipmentRepository。如果你想測試EquipmentRepository的功能,你需要創建另一個單元測試並相應地進行配置。

+0

我希望使用
:EquipementRepository equipmentRepository;
@Test public void testGetListEquipement(){//列表 list = new ArrayList (); 列表 list = equipmentRepository.findAll(); assertEquals(list.size(),2); }我有同樣的錯誤 –

+0

它與EquipmentRepository的合作非常感謝 –