我想编写一个JUnit @Rule(版本4.10)来设置一些对象(实体管理器),并通过将其“注入(inject)”到变量中使其在测试中可用。
像这样:
public class MyTestClass() {
@Rule
MyEntityManagerInjectRule = new MyEntityManagerInjectRule():
//MyEntityManagerInjectRule "inject" the entity manager
EntityManger em;
@Test...
}
问题是我不知道如何在MyEntityManagerInjectRule中获取
MyTestClass
的当前实例(扩展了TestRule),因为它只有一种方法。Statement apply(Statement base, Description description);
在Description中,只有类MyTestClass,而没有用于测试的实例。
一种替代方法是使用org.junit.rules.MethodRule,但已弃用。
“之前”和“之后”不足以完成此任务,因为那时我需要将代码复制到测试中,并且它们或多或少都已弃用。 (请参见Block4JClassRunner.withBefores/withAfters)。
因此,我的问题是如何在不使用不推荐使用的东西的情况下访问测试类实例。
最佳答案
怎么样:
public class MyTestClass() {
@Rule
public TestRule MyEntityManagerInjectRule =
new MyEntityManagerInjectRule(this); // pass instance to constructor
//MyEntityManagerInjectRule "inject" the entity manager
EntityManger em;
@Test...
}
只需将测试类实例添加到
@Rule
的构造函数中即可。请注意分配顺序。