2010-02-22 194 views
6

我有一个JUnit 4测试套件,它具有BeforeClass和AfterClass方法,用于为以下测试类进行设置/拆卸。 我需要的是由他们自己运行测试类,但为此我需要为每个测试类设置/拆卸场景(BeforeClass和AfterClass或类似的东西)。问题是,当我运行套件时,我不想在每个测试课前后执行setup/teardown,我只想执行测试套件中的setup/teardown(一次)。 这可能吗?提前致谢。Junit 4测试套件和单个测试类

回答

4

我不知道任何标准的方式来与JUnit做到这一点。正如你可能已经知道的那样,它的原因是你的测试用例应该彼此独立运行。这涉及在每种测试方法之前和之后运行的“正常”设置/拆卸方法。课堂设置和拆解虽然有点不同 - 尽管我仍然更喜欢独立运行测试并且避开麻烦区域。然而,如果你真的确信自己在做什么,你可以使用全局标志来表示是否运行类设置/拆卸,并在类设置/拆卸方法中检查其状态。在你的测试套件中,你可以包含一个特殊的类作为第一个类,它只是执行设置并设置全局标志来向真实的测试用例表明它们的类设置/拆卸方法不能运行。同样,套件中特殊的最后一个类可以执行拆卸代码。需要注意的是,我担心JUnit不能保证套件内测试类的执行顺序,尽管它很可能会按照指定的顺序执行它们 - 但这只是一个实现细节。试试看,它可能适用于你 - 但不能保证它会始终按照你的期望做。

+2

感谢您的回答,我居然想到了这一点,但我想也许有一个更好的解决方案。我想做什么的原因是因为安装程序清理环境并重置数据库,所以需要一些时间,这就是为什么我不想运行每个测试类的设置,但我需要当我运行个人测试。 – Hypnus 2010-02-22 11:38:11

3

如果您有jUnit 4.7+,我建议您查看称为规则的新功能(在this blog post中进行了说明)。他们可能不是你想要的,但他们可能是你用jUnit得到的最好的。

假设TestNG有更好的测试分组的可能性,但我还没有真正考虑过它自己呢。

0

不,在JUnit中没有标准的方法来做到这一点,尽管你可以像PéterTörök建议的那样攻击一些东西。

但请注意,您或多或少会滥用JUnit来执行此操作。整个单元测试它是彼此独立的。这是因为测试之间的依赖关系会产生一个完整的维护噩梦(测试失败,因为按错误顺序运行)。

所以我建议你认真考虑,如果它是不是更好,只是始终运行安装...

+0

谢谢,编号确实考虑过,但设置的时间比所有测试类的孔测试长得多:) – Hypnus 2010-02-22 11:33:38

+0

我觉得你的痛苦:-(。如果实际上也必须这样做,对于复杂设置的测试虽然它只是每个班级),某种“我已经初始化”的标志可能是你最好的选择。 – sleske 2010-02-22 14:49:43