java - 对于模拟对象,Mockito 休息模板始终为空

标签 java spring junit mocking mockito

当模拟包含休息模板的类时,休息模板始终为空,我的代码是:

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");
     }
}

检查行 Mockito.doReturn(byeArray).when(classA).method("url"); 时我注意到对象 classA 包含其余模板,但它为空。

最佳答案

模拟是在依赖项上完成的,而不是在被测试的类上完成的。还有一些方法可以在测试方法下模拟类,这可以使用 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);
}

关于java - 对于模拟对象,Mockito 休息模板始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61934163/

相关文章:

java - 如何将 JNDI 自定义资源作为属性添加到 weblogic 12c

java - 检查字符串输入的任何部分是否不是数字

java - 在 Maven/Spring Boot 项目中运行测试时出现 MojoFailureException (NoClassDefFounderror)

java - 在Junit测试中,如何使用assertEquals()比较两个ArrayList<Double>,是否有更好的替代方案?

java - 如何在 Eclipse 中运行简单的 JUnit 测试

java - Junit 未获取 persistance.xml EJB3

java - 条件条款未按预期发挥作用

java - 在父类(super class)构造函数中创建子类对象进入无限循环java

java - 将 Spring tx 与任务混合

java - 将 Spring Socials (Facebook) 与基于 XML 的 Spring MVC 集成