У меня есть утилита тестирования, для которой мне нужно иметь свежий экземпляр для каждого метода теста (чтобы предотвратить утечку этого состояния между тестами). До сих пор я использовал область действия «прототип», но теперь я хочу иметь возможность подключить утилиту к другой тестовой утилите, и проводные экземпляры должны быть одинаковыми для каждого теста.
Кажется, это стандартная проблема, поэтому мне было интересно, есть ли область действия "метода тестирования" или что-то подобное?
Это структура тестового класса и тестовых утилит:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {
@Autowired
private TestDriver driver;
@Autowired
private TestStateProvider state;
// ... state
// ... methods
}
@Component
@Scope("prototype") // not right because MyTest and TestStateProvider get separate instances
public class TestDriver {
// ...
}
@Component
public class TestStateProvider {
@Autowired
private TestDriver driver;
// ...
}
Я знаю, что мог бы использовать @Scope("singleton")
и @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
, но это обновляет больше, чем мне нужно - нового экземпляра TestDriver
для каждого теста будет достаточно. Кроме того, этот подход подвержен ошибкам, поскольку все тесты, использующие TestDriver
, должны знать, что им также нужна аннотация @DirtiesContext
. Поэтому я ищу лучшее решение.