我正在为方法' methodA
'编写Junit测试。这是在班级' classA
'。在' 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.
}
}
答案 0 :(得分:0)
我正在为类中的方法
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<>();
}
}