有 Java 编程相关的问题?

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

对于模拟对象,java Mockito rest模板始终为空

模拟包含rest模板的类时,rest模板始终为空,我的代码为:

public class ClassA {

    private final RestTemplate restTemplate;

    public ClassA(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public byte[] method(String url) {
       // do some restTemplate.getForObject()
    }
}

   @RunWith(SpringRunner.class)
   @SpringBootTest(classes = {Application.class})
public class TestClass {

    @Mock
    private ClassA classa

     public void test1() {

      Mockito.doReturn(byeArray).when(classA).method("url");
     }
}

在检查线路时,请注意。多雷图恩(拜耳雷)。当(classA)。方法(“url”);我注意到对象classA包含rest模板,但它是空的


共 (1) 个答案

  1. # 1 楼答案

    模拟是在依赖项上完成的,而不是在被测试的类上。还有一些方法可以在测试方法下的类上进行模拟,这可以使用Spy完成

    在你目前的情况下,应该是这样的

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = {Application.class})
    public class TestClass {
    
        @InjectMock
        private ClassA classa
    
        @Mock
        private RestTemplate restTemplate
    
        @Test
        public void test1() {
          Mockito.doReturn(byeArray).when(restTemplate).method(url);
       }
    }
    

    测试ClassA下的类应该用@InjectMocks注释,依赖项应该用@Mock模拟

    另外需要注意的是,在您的测试用例中,您应该调用需要测试的ClassA方法

    @Test
    public void test1() {
      Mockito.doReturn(byeArray).when(restTemplate).doSomething(url);
    
      classa.method(url);
    }