有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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**

}

共 (2) 个答案

  1. # 1 楼答案

    您可以通过在测试类中自动连接来注入apicontrollerbean,而不是执行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());
        }
    }
    
  2. # 2 楼答案

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

    尝试在测试中插入控制器