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

时间:2014-11-14 14:37:19

标签: java design-patterns junit 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")
    }
}

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

我的问题是:

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

1 个答案:

答案 0 :(得分:1)

当您只运行一个测试类时,一个好的解决方案是将初始化代码移动到测试类。您需要添加@Before批注来初始化属性。

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

此外,初始化数据可以是静态变量,用于检查是否已为该特定执行初始化。