gpt4 book ai didi

java - Junit Mockito 没有像预期的那样 mock

转载 作者:搜寻专家 更新时间:2023-11-01 02:38:34 24 4
gpt4 key购买 nike

我正在尝试通过模拟某些方法来编写单元测试。然而,我面临一些问题,其中我认为其中一个对象没有被 mock 。

class A {

Class_C c;

Class A(String x) {
c = new Class_C(x);
}

public boolean internalMethod(String internalInput) {

// Some Logic
// Calls Inet4Address.getByName(internalInput)
}

public boolean method_to_be_tested(String input) {
boolean result_1 = internalMethod(input);
boolean result_2 = c.someMethod(result_1);

}
}

我写的单元测试如下:

 @Test
public void test_method_to_be_tested() {

A testObj = new A("test_input");
testObj.c = Mockito.mock(Class_C.class);
A spyTestObj = Mockito.spy(testObj);

Mockito.when(spyTestObj.internalMethod(Mockito.anyString())).thenReturn(true);
Mockito.when(spyTestObj.c.someMethod(Mockito.anyBoolean())).thenReturn(true);

Mockito.when(spyTestObj.test_method_to_be_tested("test_input")).thenCallRealMethod();

Assert.assertTrue(spyTestObj.test_method_to_be_tested("test_input"));
}

我得到的错误表明正在调用 Inet4Address.getByName()。它不应该是因为我已经模拟了调用它的方法的输出。

最佳答案

Mockito.when 将调用真正的方法。要解决此问题,您可以改用 Mockito.doReturn:

Mockito.doReturn(true).when(spyTestObj).internalMethod(Mockito.anyString());
Mockito.doReturn(true).when(spyTestObj.c).someMethod(Mockito.anyBoolean());

请注意,通常不需要模拟调用被侦测对象的真实方法 - 这是默认行为。

关于java - Junit Mockito 没有像预期的那样 mock ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40063895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com