TestNG тестирует разбиение на вложенные классыJAVA

Программисты JAVA общаются здесь
Anonymous
TestNG тестирует разбиение на вложенные классы

Сообщение Anonymous »

У меня есть тесты TestNG с длительным временем запуска (они инициализируют Spring, сложная настройка БД и т. д.). Теперь я хочу загрузиться только один раз, а затем запустить множество тестов в одном классе.
Чтобы тестовый класс не становился слишком большим, я хочу разделить его на внешние вложенные классы. Вот так:

Код: Выделить всё

@ContextConfiguration(initializers = SuperComplicatedStuff.class)
@SpringBootTest(
classes = {Main.class},
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
/* Important to clear context,
or different tests with different database setups will destroy each other. */
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
public class Container extends AbstractTestNGSpringContextTests {
@Autowired
private MyRepository myRepository;

@Nested
class DbIntegrationTestImpl extends DbIntegrationTest {
DbIntegrationTestImpl() {
/* Passing "this", so the implementing class can access all the
autowired variables, like "myRepository". */
super(Container.this);
}
}
}

abstract class DbIntegrationTest {
private final Container parent;

public DbIntegrationTest(Container parent) {
this.parent = parent;
}

@Test
void testRepositories() {
parent.myRepository.findById(id);
}
}
Я уже успешно проделал нечто подобное с JUnit 5. Я мог даже запускать тесты DbIntegrationTestImpl непосредственно из IntelliJ, и JUnit был достаточно умен, чтобы сначала правильно инициализировать окружающий класс (следуя всем аннотациям).
Если я использую TestNGs @Factory, я теряю возможность запускать отдельный тестовый класс, который я хочу сохранить быстрая итеративная разработка через тестирование. Кроме того, основной класс уничтожает свой контекст Spring перед запуском фабричных классов, что разрушает всю цель этой задачи.
Есть ли какой-нибудь способ сделать это или что-то подобное с помощью TestNG 7.14?

Вернуться в «JAVA»