Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';将工作委托给其他人的单元测试类的最佳方式是什么?_Java_Unit Testing_Junit - Fatal编程技术网

Java 什么';将工作委托给其他人的单元测试类的最佳方式是什么?

Java 什么';将工作委托给其他人的单元测试类的最佳方式是什么?,java,unit-testing,junit,Java,Unit Testing,Junit,我有一个关于如何最好地处理顶级类的JUnit测试的问题。假设我有一个类,SomeWriter,它有一个方法,可以重新格式化字符串并将其写入流。该方法实际上并不做这项工作,而是将其委托给一个实际做这项工作的成员对象。我在下面的课堂上总结了这一点 public class SomeWriter { public void writeReformattedDataToStream(OutputStream outStream, String message) { myReformatt

我有一个关于如何最好地处理顶级类的JUnit测试的问题。假设我有一个类,SomeWriter,它有一个方法,可以重新格式化字符串并将其写入流。该方法实际上并不做这项工作,而是将其委托给一个实际做这项工作的成员对象。我在下面的课堂上总结了这一点

public class SomeWriter {
public void writeReformattedDataToStream(OutputStream outStream, String message) {
        myReformatter.DoTheActualWorkAndWriteDataToStream(outStream, message);
}
}
现在在这个假设的例子中,我已经为myReformatter类编写了单元测试,并演示了myReformatter的工作原理。我的问题是,我应该如何在SomeWriter中处理WriterFormattedDataToStream的单元测试

如果我是黑盒测试,我需要编写与我应用于myReformatter类相同的测试,因为我不知道它如何实现任务。然而,单元测试实际上是白盒测试,因此,仅仅为了确保正确调用myReformatter,对测试有效吗

底线是我对WriteFormattedDataToStream的测试应该有效地重复myReformatter的测试,还是模拟myReformatter并检查它是否被正确调用


我很欣赏这类似于

像这样的直接授权通常属于“太简单而无法测试”的标题,但是如果您对它有一些绝对的要求,那么您需要模拟您的
输出流
(使用EasyMock或类似工具)和
myReformatter
,并验证委托是否调用了适当的方法。

尝试注入。出于测试目的,您可以注入自己的myReformater类实现,该类只需检查方法是否正确调用并返回。然后,您将单独测试您的测试类

正如chrylis所说,您不应该测试这个方法

实际上没有什么可测试的

如果您编写了一个测试委托/服务被调用的测试用例,那么您的测试将绑定到被测试方法的实现


因此,方法实施过程中的任何更改都需要更改测试;我确信你不希望这样。

他为什么要模拟OutputStream?如果他要测试这个方法,他必须确保它将
超出流
传递给代理,而不是用其他的
OutputStream
替换它;传入mock是我知道的确认
write
在同一个对象上被调用的最简单的方法。谢谢。有趣的是,似乎有一种感觉,它太简单了,无法测试。我一直在尝试TDD的设计方法,这就是为什么我完成了很多我通常不会费心的方法的测试。我现在有一种可怕的感觉,有人会告诉我,如果我先编写测试,我就不知道实现了什么。