考虑一个方法在我的服务中返回A类,
public List<A> method(){
A a=B.method_b();
List<A> list=new ArrayList<>();
for(A aa:a){
A classA=new A();
classA.setVal1(aa.getVal1());
list.add(classA);
}
return list;
}
我的pojo课
class A{
private int val1;
private int val2;
.
.
.
.
private int val10;
//setter and getter
}
所以在测试用例中,我写为
@Mock
B b;
@Test
public void check(){
Mockito.when(b.method_b())
.thenReturn(return_A());
}
private A return_A(){
A a=new A();
a.setVal1(1);
.
.
.
a.setVal10(10);
}
在这里一切正常,代码覆盖范围也很好.但是我的问题是,是否有任何可能的方法来避免通过使用Mockito返回A类的私有方法?
解决方法:
在单元测试中,您可以根据输入定义类的行为.
这意味着您必须指定此输入.没有其他办法了.
有不同的方法可以做到这一点.
一种配置DTO的方法.
另一种方法是生成输入数据.但这有一些缺点:
-您仍然需要一个方法(或类)来做到这一点,
-它使您的考试难以阅读和理解,
-它会在您的测试中引入失败可能性,从而降低可靠性,
另一种方法是仅在测试方法的// arrange部分中设置当前测试所需的那些值:
@Mock
B b;
@Test
public void check(){
// arrange
Mockito.when(b.method_b())
.thenReturn(return_A());
A a=new A();
// values to be used by cut in this test
a.setVal1(1);
a.setVal3(3);
// act
// assert
}