gpt4 book ai didi

java - 自定义 Guice 作用域应如何与 TestNG 集成?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:02:29 26 4
gpt4 key购买 nike

我们使用自定义 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com