使用程序化TestNG运行Spring上下文测试

时间:2014-12-04 18:02:24

标签: java spring testng

我想使用TestNG API以编程方式运行我的集成测试

我认为这可以使用

完成
TestListenerAdapter tla = new TestListenerAdapter();
org.testng.TestNG testng = new org.testng.TestNG();
testng.setTestClasses(new Class[] { SomeTest.class });
testng.addListener(tla);
testng.run();

现在在SomeTest类中,我有一些自动装配的弹簧资源。我初始化了spring上下文,但似乎当TestNG运行该类时,它自己创建SomeTest.class的一个新实例,而不一定使用Spring,然后通过spring容器发生的所有自动装配和@Autowired标签都丢失了。 (这是我最初的猜测,我可能错了)

有没有办法可以运行测试,以便TestNG通过Spring上下文获取实例。

1 个答案:

答案 0 :(得分:2)

您应该对SpringTest采用测试依赖,并使用其testing documentation中的一个解决方案。

@ContextConfiguration(locations = { "classpath:spring-test-config.xml" })
public class SomeSpringTest extends AbstractTestNGSpringContextTests {
    @Autowired
    private SomeClass someClass;

    @Test
    public void someTest() {
        ...
    }
}

如果您需要交易支持,可以使用AbstractTransactionalTestNGSpringContextTests。以下是有关访问applicationContext中的AbstractTestNGSpringContextTests的文档的相关摘要:

  

AbstractTestNGSpringContextTests是一个抽象的基础测试类   将Spring TestContext Framework与explicit集成在一起   TestNG环境中的ApplicationContext测试支持。当你   扩展AbstractTestNGSpringContextTests,可以访问受保护的   applicationContext可用于执行的实例变量   显式bean查找或测试整个上下文的状态。