2015-10-06 83 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的合作非常感谢 –