java - 用 Mockito 模拟 "inner"对象

标签 java junit mockito

单元测试和 mockito 很新,我有一个方法来测试它调用新对象上的方法。 我如何模拟内部对象?

methodToTest(input){
...
OtherObject oo = new OtherObject();
...
myresult = dosomething_with_input;
...
return myresult + oo.methodX();
}

我可以模拟 oo 返回“abc”吗? 我真的只想测试我的代码,但是当我模拟“methodToTest”返回“42abc”时,我将不会测试我的“dosomething_with_input”代码 ...

最佳答案

我认为实现 methodToTest 的类被命名为 ClassToTest

  • OtherObject创建工厂类
  • 将工厂作为 ClassToTest 的字段
  • 要么
    • 将工厂作为ClassToTest 构造函数的参数传递
    • 或者在分配ClassToTest对象时初始化它,并为工厂创建一个setter

你的测试类应该是这样的

public class ClassToTestTest{
    @Test
    public void test(){
        // Given
        OtherObject mockOtherObject = mock(OtherObject.class);
        when(mockOtherObject.methodX()).thenReturn("methodXResult");
        OtherObjectFactory otherObjectFactory = mock(OtherObjectFactory.class);
        when(otherObjectFactory.newInstance()).thenReturn(mockOtherObject);
        ClassToTest classToTest = new ClassToTest(factory);

        // When
        classToTest.methodToTest(input);

        // Then
        // ...
    }
}

关于java - 用 Mockito 模拟 "inner"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15759448/

相关文章:

java - 使用 Spring Boot RestController 进行 Junit 测试

spring-boot - Spring Boot中JPA Repository的Save方法的单元测试

java - APP停止工作 - fragment

java - 安卓应用程序 : page stopped working

java - JFreechart,带填充区域的折线图

java - 当尝试部分模拟 void 方法时,我收到 NotAMockException - 我做错了什么?

java - 在一个类中使用 Mockito spy 从另一个类调用静态方法

java - Mockito 可以根据方法调用时的值来验证参数吗?

java - @Spy 在两个列表上注释时不起作用

java - 自动装箱和原始类型以匹配方法签名