作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们使用自定义 Guice 范围,@TestScoped
,对于我们的一些持续单个测试方法的 JUnit 测试,以及一个 JUnit @Rule
适本地进入和退出范围。它看起来像这样:
public class MyJUnitTest {
@Rule public CustomRule customRule = new CustomRule(MyModule.class);
@Inject private Thing thing;
@Test
public void test1() {
// Use "thing"
}
@Test
public void test2() {
// Assuming "Thing" is @TestScoped, we'll have a new instance
}
}
我们开始将 TestNG 用于其他项目中的一些测试,我们希望有一个类似的模式。到目前为止,我们已经想出了这个:
@Listeners(CustomTestNGListener.class)
@Guice(modules = MyModule.class)
public class MyTestNGTest {
@Inject private Provider<Thing> thingProvider;
@Test
public void test1() {
Thing thing = thingProvider.get();
// Use "thing"
}
@Test
public void test2() {
Thing thing = thingProvider.get();
// Assuming "Thing" is @TestScoped, we'll have a new instance
}
}
public class CustomTestNGListener implements IHookable {
@Override
public void run(IHookCallBack callBack, ITestResult testResult) {
TestScope.INSTANCE.enter();
try {
callBack.runTestMethod(testResult);
} finally {
TestScope.INSTANCE.exit();
}
}
}
这个设计有几个问题:
与 JUnit 不同,TestNG 为每个方法使用相同的测试类实例。这意味着我们必须注入(inject) Provider<Thing>
而不仅仅是 Thing
,这很尴尬。
出于某种原因,CustomTestNGListener
正在我们所有的测试中运行,即使是那些没有 @Listeners(CustomTestNGListener.class)
的测试注解。我已经通过显式检查监听器本身中的注释来解决这个问题,但这感觉就像一个 hack(虽然我确实看到 MockitoTestNGListener 做同样的事情)。
有没有更熟悉 TestNG 的人对处理这些问题有什么建议?
最佳答案
代替
public class MyTestNGTest {
@Inject private Provider<Thing> thingProvider;
@Test
public void test1() {
Thing thing = thingProvider.get();
在 TestNG 中你可以使用
public class MyTestNGTest {
@Inject
private Thing thingInjected;
private Thing thing;
@BeforeTest
public void doBeforeTest() {
thing = thingInjected.clone();
}
或者在doBeforeTest()
中调用thingProvider.get()
,最好有很多@Test
public class MyTestNGTest {
@Inject private Provider<Thing> thingProvider;
private Thing thing;
@BeforeTest
public void doBeforeTest() {
thing = thingProvider.get();
}
关于java - 自定义 Guice 作用域应如何与 TestNG 集成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27322150/
我是一名优秀的程序员,十分优秀!