我有一个问题,关于如何最好地处理顶层类的JUnit测试。想象一下,我有一个名为SomeWriter的类,它具有重新格式化字符串并将其写入流的方法。该方法实际上不执行工作,而是将其委派给实际执行真正工作的成员对象。我在下面的类中概括了这一点。
public class SomeWriter {
public void writeReformattedDataToStream(OutputStream outStream, String message) {
myReformatter.DoTheActualWorkAndWriteDataToStream(outStream, message);
}
}
在这个假设的例子中,我已经为myReformatter类编写了单元测试,并证明了myReformatter的工作。我的问题是,我应该如何处理SomeWriter中writeReformattedDataToStream的单元测试?
如果我进行黑盒测试,我需要编写与我应用于myReformatter类相同的测试,因为我不知道它如何实现任务。然而,单元测试实际上是白盒测试,所以仅确保正确调用myReformatter的测试是否有效?
归根结底,我的writeReformattedDataToStream测试应该有效地重复对myReformatter的测试,还是模拟myReformatter并仅检查其是否被正确调用?
我很感激这与JUnit Test - Class invokes methods in other class类似。
outStream
传递给委托,并且不会用其他的OutputStream
替换它;传入一个模拟对象是我知道确认write
被调用在同一个对象上最简单的方法。 - chrylis -cautiouslyoptimistic-