Spring:如果我不能扩展AbstractTestNGSpringContextTests,如何在Testng测试类中获取spring applicationContext

时间:2016-12-22 01:43:14

标签: java spring testng integration-testing

我的测试已经扩展了一个抽象的BaseIntegrationTest类,所以不能extends AbstractTestNGSpringContextTests类 - 就像我们通常使用Testng Spring集成测试一样,而且我不希望我的BaseIntegrationTest加载spring应用程序上下文(通过{ {1}})因为有更多的子类测试不需要上下文(具有数据库实体),并且大部分时间我将排除需要数据库连接进行集成测试的当前测试。所以有一段时间我需要运行这个基于Testng的测试,它已经扩展了一些类并且仍然需要contextAware(我已经尝试了extends AbstractTestNGSpringContextTests这对我不起作用,也许我这样做是错的?) 。你会怎么做?

1 个答案:

答案 0 :(得分:2)

这就是Spring如何与TestNG集成 - 您必须扩展AbstractTestNGSpringContextTests。或者,您可以在测试中手动实例化Spring:

new ClassPathXmlApplicationContext("context1.xml", "context2.xml")

但是,这不允许您使用其他类型的注释,例如@Transactional。您可以编写自己与Spring over TestNG侦听器的集成(嗯..为什么Spring没有使用它?),但是这需要一些时间来实现和调试:)

另外,我想提一下扩展自己的基类不是一个好主意。虽然不幸的是它很常见。更好的(更容易阅读,更友好的OOP)方法是使用您的通用逻辑创建单独的类和函数。然后在测试中明确调用它们。