我有一个类如下
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);
}
}
我有以下疑问/问题:
如您所见,我想模拟返回的 objB 的值。我可以吗 当我实例化类时,将模拟的 objB 传递给构造函数 CLZA?我也应该 mock CLZA吗?如果我需要 mock CLZA,我该怎么做 将它与我的模拟 objB 相关联?
现在,我不断收到 NullPointerException
strBuilder.append("这是我现在得到 NPE 的行");
。看来 strBuilder 没有实例化。任何人都可以 帮助了解如何在这种情况下进行测试?
欣赏。
最佳答案
事实证明,NPE 是由另一个问题引起的。这个单元测试工作正常。抱歉造成误导。
关于java - 如何模拟传递给构造函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60517635/