Design patterns JUnit设计中的模式
我正在评估JUnit的设计 导入的JUnit有两个重要部分:v3.x的代码(向后兼容性原因)和v4.x的代码 v3.x有一个非常清晰的设计,我已经确定了多种模式和良好的OO实践(模板方法模式、组合、适配器等) 然而,事实证明v4.x要困难得多。经过一些分析,我一直无法真正找到它的不同模式。然而,我确实发现了这一引文:“我想到了JUnit3到JUnit4的演变。JUnit3是一个小型框架,它使用了多种模式,如复合模式、模板方法和命令。JUnit4利用了J2SE5.0中引入的注释元编程工具。模式的使用消失了,框架演变成一组小的注释,再加上一个执行注释Java代码的测试运行器基础设施。” 从Design patterns JUnit设计中的模式,design-patterns,junit,Design Patterns,Junit,我正在评估JUnit的设计 导入的JUnit有两个重要部分:v3.x的代码(向后兼容性原因)和v4.x的代码 v3.x有一个非常清晰的设计,我已经确定了多种模式和良好的OO实践(模板方法模式、组合、适配器等) 然而,事实证明v4.x要困难得多。经过一些分析,我一直无法真正找到它的不同模式。然而,我确实发现了这一引文:“我想到了JUnit3到JUnit4的演变。JUnit3是一个小型框架,它使用了多种模式,如复合模式、模板方法和命令。JUnit4利用了J2SE5.0中引入的注释元编程工具。模式的使
所以,我在这里有点纠结。我不确定如何分析v4.x。底线是没有明确的设计吗?它是一堆乱七八糟的代码吗?还是我遗漏了什么,背后有什么设计吗?JUnit4中的模式与JUnit3中的模式相同。区别在于所有测试的继承限制类必须是不再需要的
TestCase
的子类
我仍然认为JUnit 4仍然使用模板方法,只是模板方法的名称不限于一个名称。现在不再使用在每次测试之前首先调用的模板方法void setup()
,模板是“调用所有方法,无论它们的名称如何,由注释之前的@注释的。模板模式的总体思想仍然存在
类似地,命令模式仍然存在:JUnit4没有调用每个以单词“test”开头的public void
无参数方法作为命令,而是调用任何带有@test
注释的public void
无参数方法
此外,20组4模式并不是唯一的设计模式。在JUnit3中有许多特定于测试的模式很难或很笨拙,现在在JUnit4中很容易做到。例如,测试夹具设置和测试夹具拆卸都必须在JUnit3中手动完成,并且经常会导致在测试类之间无法正确重置夹具的错误。现在JUnit4有了@BeforeClass
和@AfterClass
(还有模板方法)
我建议阅读GerardMeszaros的XUnit测试模式。它是在JUnit 3天内编写的,但仍然适用。谢谢,我对JUnit 4的结构感到困惑。现在你解释了,确实有些模式似乎以某种方式存在。然而,我仍然发现JUnit3更容易访问。您是否同意JUnit4的总体设计已经从JUnit3降级了?也许我得出这个结论是因为我对更传统的模式和上面的引用有偏见,但我仍然对这个主题的其他观点感兴趣。@Sven不,我不认为JUnit4中的整体设计已经退化。事实上,我认为情况有所改善。我将举两个例子:1。因为测试方法现在是用@test
注释的,所以您不再需要让方法名称以“test”开头,这使得方法名称更短、更具意图。2.由于测试类不再需要扩展TestCase
,Java也需要单一继承,因此您的测试类现在可以扩展与JUnit无关的其他类,从而使您的代码得到更好的设计