我有一个带有 BeforeClass 和 AfterClass 方法的 JUnit 4 测试套件,可以为以下测试类进行设置/拆卸。我需要的是也由他们自己运行测试类,但为此我需要为每个测试类设置/拆卸场景(BeforeClass 和 AfterClass 或类似的东西)。问题是,当我运行套件时,我不想在每个测试类之前和之后执行设置/拆卸,我只想从测试套件执行设置/拆卸(一次)。是否可以 ?提前致谢。
3 回答
我不知道使用 JUnit 执行此操作的任何标准方法。正如您可能已经知道的那样,其原因是您的测试用例应该彼此独立运行。这涉及在每个测试方法之前和之后运行的“正常”设置/拆卸方法。不过,类设置和拆卸有点不同——尽管我仍然更喜欢独立运行我的测试并远离麻烦区。
但是,如果您真的确信自己在做什么,则可以使用全局标志来指示类设置/拆卸是否要运行,并在类设置/拆卸方法中检查其状态。在您的测试套件中,您可以包含一个特殊的类作为第一个类,它只是执行设置并设置全局标志以向真实的测试用例指示它们的类设置/拆卸方法不得运行。同样,套件中的最后一个特殊类可以执行拆卸代码。需要注意的是,恐怕 JUnit 不保证套件内测试类的执行顺序,尽管它很可能确实以指定的顺序执行它们——但这只是一个实现细节。试试看,它可能对你有用——但不能保证它总是能达到你的预期。
如果您有 jUnit 4.7+,我建议您研究名为 Rules 的新功能(在这篇博文中进行了解释)。它们可能不是您想要的,但它们可能是您使用 jUnit 获得的最好的。
据说 TestNG 有更好的测试分组可能性,但我自己还没有真正研究过。
不,在 JUnit 中没有执行此操作的标准方法,尽管您可以按照 Péter Török 的建议破解一些东西。
但是请注意,您在执行此操作时或多或少地滥用了 JUnit。单元测试的重点是它们彼此独立。这是因为测试之间的依赖关系造成了一场全面的维护噩梦(测试失败,因为以错误的顺序运行)。
所以我建议你强烈考虑是否总是运行设置不是更好......