Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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
Java 如何编写Junit安装程序功能,使其在套件或类级别都能工作?_Java_Junit_Categories - Fatal编程技术网

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.
   }
  }