在为B类编写单元测试时,我该如何测试该方法 - > checkValidity()
。该方法在内部初始化类C实例并调用该对象上的方法。
我们如何查看Mockito
/ Powermock
?
public class B {
public List<Object> checkValidity(){
C c=new C();
if(c.isTrue()){
.....
}
switch(c.getVal()){
case 1: ...
case 2: ..
default : ...
}
}
return list;
}
class C {
public boolean isTrue(){
....
}
public int getVal(){
....
}
}
此致
答案 0 :(得分:1)
你应该提供类C的实例作为类B的构造函数的参数。这样你就可以将该类的模拟实例传递给类B并验证实例上的方法是否被调用并在需要时模拟其结果。
public class B {
private final C c;
public B(C c){
this.c = c;
}
public List<Object> checkValidity(){
if(c.isTrue()){
}
switch(c.getVal()){
case 1: ...
case 2: ..
default : ...
}
return list;
}
class C {
public boolean isTrue(){ }
public int getVal(){}
}
现在你可以用mockito模拟C的实例。
答案 1 :(得分:1)
您可以做的是将对象C的创建外部化为package-private方法,而不是:
C c = new C();
您可以使用:
C c = createC();
之后你应该可以使用mockito Spy并通过一些模拟覆盖返回的参数。像
这样的东西 doReturn(mockedCObject).when(objectUnderTest.createC());