2 回答
TA贡献1877条经验 获得超1个赞
在这种特殊情况下,模拟调用的方法是没有意义的。然而,这不仅仅是因为它是同一个类的方法。实际上,有时会专门引入同一类的方法以允许模拟它们。例如,如果在您的类中处理通过文件 I/O 获得的某些数据,您可以将文件 I/O 隔离到它自己的方法中。然后,您可以使用文件 I/O 方法的模拟版本测试数据处理。
但是,在这种情况下,没有充分的理由isNaturalNumber
在测试中模拟getClassificationInfo
: 该方法isNaturalNumber
具有确定性的行为,并且不会导致不可接受的长执行时间。这似乎也不太可能通过模拟的情况下获得太多isNaturalNumber
在一个测试中错误地故意行为getClassificationInfo
。
你不必教条地嘲笑一切。例如,您也不要模拟标准库数学函数,如sin
或cos
,因为它们在大多数情况下也不会引起问题。模拟应该是有原因的。因此,如果您考虑模拟一个函数或方法,您应该知道您将要解决哪个问题。如果没有问题要解决,不要嘲笑。
TA贡献1862条经验 获得超6个赞
不,这不是一个好习惯,因为我们应该在涉及其他模块/类对象的地方模拟存根。
例如:
public class A{
private B aObj;
public void aDoingSomeBWork(){
aObj.someMethod();
someLogic();
}
private/public/any modifier void someLogic(){
//some logic
}
}
public class B{
public void someMethod(){}
}
那么你应该模拟 B 的 someMethod() 但不应该模拟 A 的 someLogic() 因为你正在单元测试 A 的 aDoingSomeBWork() 方法。如果你模拟 someLogic(); 在单元测试中,可能会出现您的代码中断的情况。
添加回答
举报