我正在为一个类编写单元测试,该类具有调用同一类的其他方法的方法。这导致许多场景需要测试。
我认为我可以间谍()方法调用的行为,这样我只测试测试中的方法,而不是打扰其他方法行为。我将通过针对每种方法的单独测试来覆盖它们。
class MyClass{
public void myMethodToBeTested(){
aPrivateMethod();
aPublicMethod();
}
private void aPrivateMethod(){
// doing something
// Has some if else scenarios
}
public void aPublicMethod(){
// doing something
// Has some if else scenarios
}
}
对这个班级进行单元测试的最佳方法是什么?
答案 0 :(得分:3)
您应该通过调用类的外部接口(即公共方法)进行测试。
如果这些方法在同一个类中调用私有方法,那么那些私有方法也需要完全覆盖 - 否则它们将如何被测试?
对于正在测试的课堂外的资源或课程的调用,存根或间谍才有意义。
您正在尝试测试整个课程,而不仅仅是单个方法。
答案 1 :(得分:0)
在我看来,aPrivateMethod可以作为公共单独的类进入,并且aPublicMethod的主体也可以是该类中的不同方法。
在重构之后,您可以注入新类并在相应的位置调用这些方法。
在测试方面,您可以模拟/存根这些方法并测试myMethodToBeTested()。
答案 2 :(得分:0)
首先,我将私有方法更改为默认/包级别。这样,占用相同包的单元测试可以访问它,但是在该包之外的其他方法不能接触它。与私人范围不完全相同,但大部分时间都足够接近。
然后,在MyClass上设置一个Spy()。
如果您对该术语不清楚:
因此,创建一个Spy(MyClass),指定aPrivateMethod()和aPublicMethod()应该返回以进行测试,然后调用myMethodToBeTested()并查看返回的内容。在您的示例中,该方法为void,因此它不返回任何内容。但你可以随时: