str*_*ine 1 junit unit-testing
这是我对单元测试时我们视为"单位"的疑问.
说我有这样的方法,
public String myBigMethod()
{
String resultOne = moduleOneObject.someOperation();
String resultTwo = moduleTwoObject.someOtherOperation(resultOne);
return resultTwo;
}
Run Code Online (Sandbox Code Playgroud)
(我为someOperation()和someOtherOperation()单独编写了单元测试
这个myBigMethod()有点像上面那样使用它们集成了ModuleOne和ModuleTwo,
那么,方法"myBigMethod()"仍被视为"单位"吗?
我应该为这个"myBigMethod()"写一个测试吗?
假设我已经为myBigMethod()写了一个测试...如果testSomeOperation()失败,它也会导致testMyBigMethod()失败......现在testMyBigMethod()的失败可能会显示一个不太正确的位置错误.
导致两次测试失败的原因对我来说并不是那么好看.但是,如果有更好的方法,不要...?在那儿 ?
谢谢 !
您想在不测试依赖项的情况下测试myBigMethod的逻辑.
看起来myBigMethod的规格是:
测试这种行为的关键是打破对moduleOneObject和moduleTwoObject的依赖.通常,这是通过将依赖项传递到构造函数中的测试类(构造函数注入)或通过属性(setter注入)设置它们来完成的.
问题不仅仅是学术问题,因为在实践中,moduleOneObject和moduleTwoObject可能会出现并触及外部系统,例如数据库.真正的单元测试不会影响外部系统,因为它会使其成为"集成测试".