Чтобы тестовый класс не становился слишком большим, я хочу разделить его на внешние вложенные классы. Вот так:
Код: Выделить всё
@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);
}
}
Если я использую TestNGs @Factory, я теряю возможность запускать отдельный тестовый класс, который я хочу сохранить быстрая итеративная разработка через тестирование. Кроме того, основной класс уничтожает свой контекст Spring перед запуском фабричных классов, что разрушает всю цель этой задачи.
Есть ли какой-нибудь способ сделать это или что-то подобное с помощью TestNG 7.14?