我试图了解用于JUnit的TestRunner(程序包junit.textui)类的设计模式。 TestRunner类扩展了监听器
并具有听众的引用。
如果是观察者设计模式,那为什么呢
扩展听众?它应该仅具有监听器的引用。
最佳答案
junit.textui.TestRunner
符合Observer pattern,但它是观察者,而不是主题。至少它将是观察者-不再。
JUnit公开了TestListener接口(interface):TestResult类运行TestCase,调用其自己的方法startTest
和endTest
。 TestResult还包含一个TestListener实例列表,并在测试开始或结束时通知所有实例。这是典型的观察者模式:TestResult是主题,通知其TestListener实例的集合,其中之一可以是TestRunner将自身添加到列表中。
就是说TestRunner doesn't currently add itself as a listener to TestResult,并且具有必需的testStarted
,testEnded
和testFailed
方法的空实现。相反,它将ResultPrinter添加到监听器列表中。我认为这在某些时候已被排除在TestRunner之外。
因此,TestRunner被设置为观察者,但是它不再像一个观察者。总而言之,这实际上表明了设计模式的优势:它提供了通过针对那些特定接口(interface)进行编码来重构代码和分离行为的机会。