JUnit - 测试一个方法,该方法又调用了一些方法

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()的失败可能会显示一个不太正确的位置错误.

导致两次测试失败的原因对我来说并不是那么好看.但是,如果有更好的方法,不要...?在那儿 ?

谢谢 !

Rob*_*Rob 5

您想在不测试依赖项的情况下测试myBigMethod的逻辑.

看起来myBigMethod的规格是:

  1. 调用moduleOneObject.someOperation
  2. 将结果传递给moduleTwoObject.someOtherOperation
  3. 返回结果

测试这种行为的关键是打破对moduleOneObject和moduleTwoObject的依赖.通常,这是通过将依赖项传递到构造函数中的测试类(构造函数注入)或通过属性(setter注入)设置它们来完成的.

问题不仅仅是学术问题,因为在实践中,moduleOneObject和moduleTwoObject可能会出现并触及外部系统,例如数据库.真正的单元测试不会影响外部系统,因为它会使其成为"集成测试".