gpt4 book ai didi

java - 当使用内部 void 方法调用的方法调用时,Mockito doNothing 不起作用

转载 作者:行者123 更新时间:2023-11-29 08:31:02 26 4
gpt4 key购买 nike

主类

public class BootSample {

public int call(int m) {
System.out.println("Entering into Call Method");
int n = m*10;
TestUtil testUtil = new TestUtil();
testUtil.add(m, n);
System.out.println("End of Call Method Value n : " + n);
return n;
}

}

实用类

public class TestUtil {

public void add(int a, int b) {
System.out.println(" Entering into TestUtil Method ");
int c = a +b;
System.out.println(" End of TestUtil Method Value : " + c);
}

}

测试类

@RunWith(MockitoJUnitRunner.class)
public class BootSampleTest {

@Mock
TestUtil testUtil;

@Before
public void setup() {

}

@Test
public void utilSuccess() throws Exception {
BootSample bootSample = new BootSample();
doNothing().when(testUtil).add(any(Integer.class),any(Integer.class));
int result = bootSample.call(10);
assertEquals(result,100);
}

}

输出:

Entering into Call Method
Entering into TestUtil Method
End of TestUtil Method Value : 110
End of Call Method Value n : 100

我正在尝试使用 doNothing 模拟 util void 方法调用但不起作用。有人可以帮我解决吗?我在我们的应用程序中遇到了类似的功能。

最佳答案

问题是您的call 方法负责创建一个TestUtil 对象,而该对象不能被模拟。尝试将 TestUtil 添加为构造函数参数,如下所示:

public class BootSample {

private TestUtil testUtil;

public BootSample(TestUtil testUtil) {
this.testUtil = testUtil;
}

public int call(int m) {
System.out.println("Entering into Call Method");
int n = m*10;
testUtil.add(m, n);
System.out.println("End of Call Method Value n : " + n);
return n;
}
}

然后您需要模拟 TestUtil 类并将模拟传递给 BootSample 类:

BootSample bootSample = new BootSample(testUtil);

关于java - 当使用内部 void 方法调用的方法调用时,Mockito doNothing 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48197090/

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