2016-12-22 7 views
0

Мой тест уже расширяет абстрактный класс BaseIntegrationTest, поэтому класс extends AbstractTestNGSpringContextTests не может быть таким, как мы обычно делаем с тестами тестирования Testng Spring, и я не хотите, чтобы мой BaseIntegrationTest загружал контекст весеннего приложения (по extends AbstractTestNGSpringContextTests), потому что существует намного больше тестов подкласса, которым не нужен контекст (который имеет объект СУБД), и большую часть времени я буду исключать текущие который требует подключения БД для теста интеграции. Поэтому время от времени мне нужно запустить этот тест на основе Testng, который уже расширяет некоторый класс и все еще нуждается в contextAware (я пробовал implements ApplicationContextAware, который не работает для меня, может быть, я делал это неправильно?). Как бы вы это сделали?Spring: как получить Spring applicationContext в тестовом классе Testng, если я не могу расширять AbstractTestNGSpringContextTests

ответ

2

Вот как Весна интегрируется с TestNG - вам нужно расширить AbstractTestNGSpringContextTests. В качестве альтернативы вы можете вручную создать экземпляр Spring в тестах:

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

Но это не позволит вам использовать другие виды аннотаций, как @Transactional. Потенциально вы могли бы написать свою собственную интеграцию с Spring над слушателями TestNG (hm .. почему Spring не использовал его вместо?), Но для выполнения и отладки потребуется некоторое время :)

Кроме того, я бы хотел упомянуть, что , распространяющий ваши собственные базовые классы, не является хорошей идеей. Хотя это очень распространено, к сожалению. Гораздо лучше (проще читать, OOP-более дружелюбный) способ будет создавать отдельные классы и функции с вашей общей логикой. И затем вызовите их явно в своих тестах.