java - 如何模拟传递给构造函数的参数

标签 java unit-testing mocking mockito powermockito

我有一个类如下

public Class CLZA {

     private Object obj1;
     private Object obj2;
     private StringBuilder strBuilder;

     public CLZA (CLZB objB) {
          obj1 = objB.fetchValueOfObj(Request.type1);
          obj2 = objB.fetchValueOfObj(Request.type2);
          strBuilder = new StringBuilder();
     } 

     public double computeValue(...) {
          if (this.obj1 == 1.0) {
              ...
          }
          if (this.obj2 == 2.0) {
              ...
          }
          strBuilder.append("This is the line I got NPE now");
     }
}

现在,我正在尝试做这样的事情。

@RunWith(PowerMockRunner.class)
@PrepareForTest({CLZA.class, StringBuilder.class})
public class ClzATest {

    private CLZA objA;

    @Mock
    private CLZB objB;

    @Before
    public void setUp() throws Exception {
        objA = new CLZA(objB);
        when(objB.fetchValueOfObj(any(Request.class))).thenAnswer(
                invocation -> {
                    Object argument = invocation.getArguments()[0];
                    if (argument.equals(Request.type1)) {
                        return 1.0;
                    } else if (argument.equals(Request.type2)) {
                        return 2.0;
                    } else {
                        return 0.0;
                    }
                });

    }

    @Test
    public void testComputeValue() {
        double value = objA.computeValue(...);
        assertEquals(2.0, value);
    }
}

我有以下疑问/问题:

  1. 如您所见,我想模拟返回的 objB 的值。我可以吗 当我实例化类时,将模拟的 objB 传递给构造函数 CLZA?我也应该 mock CLZA吗?如果我需要 mock CLZA,我该怎么做 将它与我的模拟 objB 相关联?

  2. 现在,我不断收到 NullPointerException strBuilder.append("这是我现在得到 NPE 的行");。看来 strBuilder 没有实例化。任何人都可以 帮助了解如何在这种情况下进行测试?

欣赏。

最佳答案

事实证明,NPE 是由另一个问题引起的。这个单元测试工作正常。抱歉造成误导。

关于java - 如何模拟传递给构造函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60517635/

相关文章:

c# - 如何使用 NSubstitute 获取被调用的参数? (或至少断言他们的属性(property))

unit-testing - 在使用模拟对象时,如何防止我的单元测试需要有关实现内部的知识?

Python 单元测试和何时模拟

java - 非泛型类中的 Java 泛型问题

java - 静态方法返回空值

javascript - ES6 [Symbol.iterator] 不是带数组的函数

objective-c - OCMockito 模拟调用 block

java - 安卓 fragment 'requestFeature must be called'

Java 比较器 : Violates General Contract

java - 我无法在 onReceive() 中的 onResponse() 之外使用 json 结果 - 改造