JUnit 4:在测试运行之前在测试套件中设置东西(比如测试的@BeforeClass方法,仅​​用于测试套件)

我想在(restful)webservice上做一些function测试。 testsuite包含一堆测试用例,每个测试用例在webservice上执行几个HTTP请求。

当然,Web服务必须运行或测试失败。 🙂

启动Web服务需要几分钟(它会解决一些繁重的数据),因此我希望尽可能不频繁地启动它(至少所有只有来自服务的GET资源可以共享一个的测试用例)。

那么在测试运行之前,有没有办法在测试套件中设置炸弹,就像测试用例的@BeforeClass方法一样?

jUnit不能做那种事 – 虽然TestNG确实有@BeforeSuite@AfterSuite注释。 通常,您可以使用构建系统来执行此操作。 在maven中,有“预集成测试”和“集成后测试”阶段。 在ANT中,您只需添加步骤即可完成任务。

您的问题几乎是jUnit 4.x中Before和After Suite执行挂钩的重复 ,所以我会看一下那里的建议。

一种选择是使用像Apache Ant这样的东西来启动你的unit testing套件。 然后,您可以在junit目标之前和之后放置目标调用,以启动和停止Web服务:

     

然后使用ant(或您选择的集成工具)运行您的套件。 大多数IDE都具有Ant支持,这使得将测试移动到连续集成环境(其中许多使用Ant目标来定义自己的测试)变得更加容易。

顺便说一句,让unit testing实际调用Web服务,数据库等外部资源是个坏主意。

unit testing应该超级快速运行,并且每次运行套件的“几分钟”延迟意味着它不会运行得那么多。

我的建议:

看一下使用EasyMock( http://www.easymock.org/ )之类的unit testing中的模拟外部依赖项。

使用Fitnesse( http://fitnesse.org/ )或本地解决方案构建一个独立的集成测试套件,该解决方案针对测试环境运行并且不断提升。