SpringBoot Junit测试自动装配问题

时间:2018-03-22 11:03:07

标签: java spring-boot junit

我试图通过调用下面的控制器类方法使用普通junit进行junit测试,当我这样做时,@Autowired对象创建注释返回null而不是创建对象。

示例:

JunitClass:

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestingJunit { 
    @Test
    public void testing() {
           APIController repo = new APIController();
           ResponseEntity<?> prod = repo.getNames(8646, 1);
           List<TestVO> ff = (List<TestVO>) prod.getBody();
           Assert.assertEquals("AA", ff.get(0).getName());
    }
}

控制器:

@Autowired
private ServiceClass serviceClass;

 public ResponseEntity<?> getNames(@PathVariable("aa") int aa, @RequestHeader(value = "version") int version){

serviceClass.callSomeMethod(); // **here i am getting null for serviceClass object**

}

2 个答案:

答案 0 :(得分:3)

这是因为您通过执行APIController repo = new APIController();手动安装控制器。这样做,Spring不会注入您的服务,因为您明确地控制了您的bean(及其依赖项)。

尝试在测试中注入控制器。

答案 1 :(得分:0)

您可以通过在测试类中自动装配APIController bean而不是执行new APIController()来注入它。通过执行新的APIController,没有创建/注入ServiceClass实例,因此给出了NullPointer异常。

下面应该是测试类。

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestingJunit { 

    @AutoWired
    APIController apiController; //apiController will be referring to bean Name

    @Test
    public void testing() {
           ResponseEntity<?> prod = apiController.getNames(8646, 1);
           List<TestVO> ff = (List<TestVO>) prod.getBody();
           Assert.assertEquals("AA", ff.get(0).getName());
    }
}