Я хочу, чтобы программа интеграции была интегрирована с помощью 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 у меня есть весенний ресурс. Я инициализировал контекст весны, но кажется, что, когда TestNG запускает класс, он создает новый экземпляр класса SomeTest.class сам по себе и не обязательно использует Spring, а затем все Autowiring, которое произошло через весенний контейнер, и тег @Autowired теряется, (Это то, что моя первоначальная догадка, и я могу ошибаться)
Есть ли способ, которым я могу запускать тесты, чтобы TestNG получал экземпляр через контекст Spring.
Вы должны принять тестовую зависимость от SpringTest
и использовать одно из решений из своей тестовой документации.
@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 с явной поддержкой тестирования ApplicationContext в среде TestNG. Когда вы расширяете AbstractTestNGSpringContextTests, вы можете получить доступ к защищенной переменной экземпляра приложенияContext, которая может использоваться для выполнения явного поиска в бинах или для проверки состояния контекста в целом.