用于配置@BeforeClass和@Before方法的模式

时间:2014-05-28 11:47:49

标签: java junit4

我现在遇到的情况如下:

public class SomeTest extends AbstractMyTest {

    @Test
    public void something() {
        //Test something, related to the AbstractMyTest config
    }

    @Override
    public String getConfiguration() {
        return "myConfigFile.ini";
    }
}

public abstract class AbstractMyTest {
    @Before
    public void before() {
        //Do some init stuff that calls getConfiguration()...
    }

    abstract String getConfiguration();
}

现在,我正在考虑摆脱AbstractMyTest类并具有以下内容:

@MyTestConfig(value="myConfigFile.ini")
public class SomeTest {
    @Test
    public void something() {
        //Test something, related to the AbstractMyTest config
    }
}

所以我可能有一个自定义Runner来完成AbstractMyTest类负责的事情。我希望能够以@BeforeClass或@Before的方式做一些事情,而不必在每个TestClass中都这样做。如何组织这样的跑步者?

1 个答案:

答案 0 :(得分:2)

我不太明白为什么你在这里需要自定义Runner

您似乎可以使用Rules完全按照自己的意愿行事。请特别注意ExternalResource rule

public class SomeTest {
    @Rule
    public MyTestRule myRule = new MyTestRule("myConfigFile.ini");
    ...
}

public class MyTestRule extends ExternalResource {
    ...
    protected void before() { ... }
    ...
}