Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Design patterns JUnit设计中的模式_Design Patterns_Junit - Fatal编程技术网

Design patterns JUnit设计中的模式

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中引入的注释元编程工具。模式的使

我正在评估JUnit的设计

导入的JUnit有两个重要部分:v3.x的代码(向后兼容性原因)和v4.x的代码

v3.x有一个非常清晰的设计,我已经确定了多种模式和良好的OO实践(模板方法模式、组合、适配器等)

然而,事实证明v4.x要困难得多。经过一些分析,我一直无法真正找到它的不同模式。然而,我确实发现了这一引文:“我想到了JUnit3到JUnit4的演变。JUnit3是一个小型框架,它使用了多种模式,如复合模式、模板方法和命令。JUnit4利用了J2SE5.0中引入的注释元编程工具。模式的使用消失了,框架演变成一组小的注释,再加上一个执行注释Java代码的测试运行器基础设施。”


所以,我在这里有点纠结。我不确定如何分析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无关的其他类,从而使您的代码得到更好的设计