Java 如何编写Junit安装程序功能,使其在套件或类级别都能工作?
我为测试套件运行了Java 如何编写Junit安装程序功能,使其在套件或类级别都能工作?,java,junit,categories,Java,Junit,Categories,我为测试套件运行了@BeforeClass设置,如下所示: @RunWith(Categories.class) @IncludeCategory(IntegrationTest.class) . . . public class IntegrationTestSuite { @BeforeClass public static void initialise() throws Exception { // Integration test-specific co
@BeforeClass
设置,如下所示:
@RunWith(Categories.class)
@IncludeCategory(IntegrationTest.class)
.
.
.
public class IntegrationTestSuite {
@BeforeClass
public static void initialise() throws Exception {
// Integration test-specific config.
}
}
当我的所有测试都在套件中运行时,这种方法效果很好。然而,当我运行单独的测试时,显然这些东西不会被执行。是否有一种更优雅的方式允许我在测试用例级别重用测试类别设置?我建议使用全局标志作为静态上下文或在属性文件中作为:
public static boolean runTestCaseStandAlone = false;
或
将测试套件方法更新为:
public class IntegrationTestSuite {
@BeforeClass
public static void initialise() throws Exception {
if(!GLOBALCONTEXT.runTestCaseStandAlone){
// Integration test-specific config.
}
}
}
为您的测试用例创建一个基类,例如
public class BaseTest ....
@BeforeClass
public static void initialise() throws Exception {
if(GLOBALCONTEXT.runTestCaseStandAlone){
// Integration test-specific config.
}
}
确保您的所有测试用例都扩展了上述基类。考虑创建一个自定义规则(可能使用),该规则将只执行一次初始化。使用一个测试对其他测试进行初始化的机制是一种反模式。它太脆弱了,因为它取决于测试的运行顺序,并且在仅运行一个测试时也会失败。我认为
@规则
机制是一个更好的解决方案。很可能是重复的。这个问题已经提了两年了,所以我想如果JUnit能取得一些进展,那就值得一看了。还有,我想做的事情是否可以通过规则来实现。这看起来很有希望。虽然这可能超出了我要问的范围,但您是否能够基于类别以编程方式应用规则?例如,应用一个集成类型ExternalResource
,应用一些配置,或者启动一个用于单元测试的SoapUI模拟。另一种可能性是,Category
的使用仍然太过实验性,无法完全实现我目前的目标。为了进一步澄清,我在一个类中进行了一系列测试,例如,IntegrationTest.class
或UnitTest.class
。然后,我的套件相应地使用这些类别。查看一些ExternalResource
示例,似乎@规则
应用于类级别,无论@Category
…我不熟悉将Category
与规则一起使用,我一直在想,对于一个类别中的测试,您将有一个规则的实现
,而对于另一个类别中的测试,您将有一个规则的不同实现Category
也许我对这一点的理解是有缺陷的,因为我无法思考如何编写只适用于类中某些测试的规则。你知道一个可以澄清这一点的例子吗?
public class BaseTest ....
@BeforeClass
public static void initialise() throws Exception {
if(GLOBALCONTEXT.runTestCaseStandAlone){
// Integration test-specific config.
}
}