我试图通过调用下面的控制器类方法使用普通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**
}
答案 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());
}
}