在运行单个测试用例时,是否有一种很好的方法来启动测试套件的初始化?

icy*_*old 5 java junit design-patterns junit4

在JUnit4下,我有一个测试套件,它使用@classrule注释来引导框架.这需要能够在测试期间构造某些对象.它还将一些任意应用程序属性加载到静态中.这些通常特定于当前的测试套件,并将在整个套件中进行大量测试.我的测试套件看起来像这样(FrameworkResource扩展ExternalResource并执行大量的bootstrap工作):

@RunWith(Suite.class)
@SuiteClasses({com.example.test.MyTestCase.class})
public class MyTestSuite extends BaseTestSuite {

    @ClassRule
    public static FrameworkResource resource = new FrameworkResource();

    @BeforeClass
    public static void setup(){
        loadProperties("props/suite.properties")
    }
}
Run Code Online (Sandbox Code Playgroud)

以上工作非常好,主要构建执行所有测试套件及其各自的测试用例(SuiteClasses?)没有问题.问题是当我在eclipse中时,我想单独运行一个测试用例,而不必运行整个套件(作为本地开发过程的一部分).我会右键单击java文件Run As> JUnit Test,任何需要框架资源或测试属性的测试都会失败.

我的问题是:

  1. JUnit4是否为此问题提供了解决方案(在每个测试用例中都没有重复初始化代码)?测试用例可以说类似@dependsOn(MyTestSuite.class)吗?
  2. 如果Junit没有神奇的解决方案,是否有一个可以帮助我的常见设计模式?

jor*_*gos 1

由于您只运行一个测试类,因此一个好的解决方案是将初始化代码移至测试类。您需要添加 @Before 注释来初始化属性。

这需要您在所有测试类上复制代码。为了解决这个问题,您可以创建一个具有 @Before 方法的抽象父类,以便所有子类都具有相同的初始化。

此外,初始化的数据可以位于静态变量上,用于检查它是否已经针对该特定执行进行了初始化。