SpringBoot @interface для суммирования различных аннотаций - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть свои собственные аннотации для модульного тестирования, которые выглядят так:

@Retention(RetentionPolicy.RUNTIME)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
@Transactional(rollbackFor = MyException.class)
public @interface DefaultTestAnnotations {
}

Мои разные классы тестов помечаются как

@RunWith(SpringRunner.class)
// @SpringBootTest() <--------------(1)
@DefaultTestAnnotations
public class MyTest1 extends Basic4Tests {

Когда я запускаю MyTest1 индивидуально, чем это удается. Если я запустил его в более крупном соединении, он потерпит неудачу из-за некоторых странных ошибок объектов БД. Я пропускаю детали для краткости.

Когда я раскомментирую (1), тесты - по отдельности или в составе - пройдут успешно. Теперь я подумал, что аннотации @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) уже достаточно. Но, очевидно, нет.

Кто-нибудь имеет идею

  • Что можно обобщить в декларации @interface? В том смысле, что они используются и являются «значимыми»
  • Почему мне нужно снова указывать @SpringBootTest()? Я думал, что декларации в interface достаточно.

ОБНОВЛЕНИЕ :

«до некоторых странных сбоев объектов БД» - означает, что тест сохраняет данные в БД и при ее получении не удается правильно восстановить перечисления. Возникшие исключения указывают на то, что извлекаются некоторые ложные данные, которые, похоже, никогда не сохраняются. Отслеживание указанной проблемы c выходит за рамки этого вопроса, поскольку я нашел решение, которое я NOT понимаю. Чтобы не сталкиваться с подобными проблемами, я хочу больше пояснить, как можно использовать @interface.

1 Ответ

0 голосов
/ 28 апреля 2020

Полагаю, вы манипулировали данными в базе данных в одном тесте, поэтому в следующем тесте нет данных, которые вы предполагаете. Spring повторно использует контекст приложения между тестами по соображениям производительности и не сбрасывает его.

Существует два решения: - использовать аннотацию @DirtiesContext в своем тесте - очищать и настраивать базу данных перед каждым тестом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...