哪个设计模式用于junit中的TestRunner类

use*_*987 5 java junit design-patterns

我试图理解用于JUnit的TestRunner(package junit.textui)类的设计模式.TestRunner类正在扩展一个监听器并具有监听器的引用.

如果是Observer设计模式,那为什么要扩展监听器呢?它应该只有听众的参考.

Jef*_*ica 3

junit.textui.TestRunner符合观察者模式,但它是观察者,而不是主体。至少,它将观察者\xe2\x80\x94,但它不再是了。

\n

JUnit 公开TestListener接口:TestResult类运行一个 TestCase,调用它自己的方法startTestendTest. TestResult 还包含 TestListener 实例的列表,并在测试开始或结束时通知所有这些实例。这是典型的观察者模式:TestResult 是主题,通知其 TestListener 实例的集合,其中之一可能是 TestRunner 将其自身添加到列表中。

\n

也就是说,TestRunner 目前并未将自身添加为 TestResult 的侦听器testStarted,并且具有其 required 、testEnded和方法的空实现testFailed。相反,它将ResultPrinter添加到侦听器列表中;我认为这是在某个时候从 TestRunner 中剔除出来的。

\n

因此,TestRunner 被设置为观察者,但它的行为不再像观察者。总而言之,这实际上展示了设计模式的优势:它允许通过针对这些特定接口进行编码来重构代码和分离行为。

\n