java SpringBoot Junit测试自动布线问题
我试图通过如下调用控制器类方法来使用普通junit进行junit测试,当我这样做时,@Autowired注释for object creation返回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**
}
# 1 楼答案
您可以通过在测试类中自动连接来注入apicontrollerbean,而不是执行
new APIController()
。与新建APIController一样,ServiceClass实例没有被创建/注入,因此产生了NullPointer异常下面应该是测试类
# 2 楼答案
这是因为您通过执行
APIController repo = new APIController();
来手动实例化控制器。这样,Spring就不会注入您的服务,因为您明确地控制您的bean(及其依赖项)尝试在测试中插入控制器