junit - JUnit 模拟方法调用
问题描述
我正在为methodA
类“ classA
”中的方法“”编写 Junit 测试。在 ' '类 ' methodA
' 的另一个方法 ' ' 中被调用。' ' 调用肥皂网络服务。我想模拟这个肥皂网络服务调用。在这种情况下,我打电话。在这里,我没有找到一种方法,在调用时应该更新模拟值。我浏览了很多关于 的链接,但它们都指仅从类中更新模拟值。那么,我怎样才能通过嘲笑他们的价值。methodB
classB
methodB
methodB
classA.methodA
classB.methodB
Mockito
junit
@Test
public void junitTest() {
String arg1 = "arg1";
classA aObj = new classA();
aObj.methodA(arg1);
}
public classA {
public string methodA(String arg1) {
classB bObj = new classB();
bObj.methodB();
//somwthing on arg1
return result;
}
}
public classB {
public list methodB() {
//web-service call
return list from web - service.
}
}
解决方案
我正在为
methodA
课堂 上的方法编写 Junit 测试classA
由于您正在对 进行单元测试methodA
,classA
因此您应该专注于仅模拟bObj.methodB();
调用。你不应该深入了解它在内部做什么或不做什么。
不是您正在创建不是理想场景的classB
对象。methodA
您应该使用适当的 getter、setter 和构造函数bObj
作为实例变量。classA
然后从您的测试类中设置此classB
依赖项。
你应该构建你的代码和一些像这样的测试:
class classAMicroTest {
@Test
public void junitTest() {
String arg1 = "arg1";
classA aObj = new classA();
classB mockedBobj = Mockito.mock(classB.class);
Mockito.when(mockedBobj.methodB()).thenReturn(new ArrayList<>());
aObj.setbObj(mockedBobj);
aObj.methodA(arg1);
Mockito.verify(mockedBobj, times(1)).methodB());
}
}
class classA {
classB bObj;
public void setbObj(classB bObj) {
this.bObj = bObj;
}
public String methodA(String arg1) {
bObj.methodB();
// somwthing on arg1
return result;
}
}
class classB {
public List<String> methodB() {
return new ArrayList<>();
}
}
推荐阅读
- reactjs - react-admin 中的事件记录/跟踪?
- apache-camel - doTry/doCatch 和全局 onException 行为
- postscript - 如何将 1 添加到 postscript 中堆栈中的每个项目?
- c# - 使用传入的字符串列表结合 SQL Server 存储过程 WITH LOCK 和 INNER JOIN
- java - 没有为此构建指定目标。您必须指定一个有效的生命周期阶段
- javascript - Is there a pointer event that equals to 'click' event?
- node.js - puppeteer@5.5.0 安装:M1 上的`node install.js`
- powershell - 使用 powershell 从 SQL 2014 导出 SSRS 报告
- vue.js - 有条件地在 Vue Router 中导入组件
- gradle - Gradle init 不是交互式的