Как бы я структурировал свои аннотации и конфигурации пружины, чтобы я мог использовать аннотацию для настройки теста TeJAVA

Программисты JAVA общаются здесь
Anonymous
Как бы я структурировал свои аннотации и конфигурации пружины, чтобы я мог использовать аннотацию для настройки теста Te

Сообщение Anonymous »

Я хочу иметь возможность просто сделать < /p>

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

@MyTestConfig
class MyTests {
@Autowired SomeJpaRepo repo;
@Test
void findAll() {
assertThatCode(repo::findAll).doesNotThrowAnyExceptions();
}
}
< /code>
То, что я начал, было сделать аннотацию < /p>
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@TestContainers
public @interface MyTestConfig {
}
< /code>
С помощью этого следующего тестирования@MyTestConfig
class MyTests {
@Container
private static final MySQLContainer MYSQL_CONTAINER =
new MySQLContainer(
DockerImageName.parse("library/mariadb")
.asCompatibleSubstituteFor("mysql"));

@DynamicPropertySource
static void mysqlProperties(DynamicPropertyRegistry registry) {
registry.add("spring.datasource.url", MYSQL_CONTAINER::getJdbcUrl);
registry.add("spring.datasource.username", MYSQL_CONTAINER::getUsername);
registry.add("spring.datasource.password", MYSQL_CONTAINER::getPassword);
}
@Autowired SomeJpaRepo repo;
@Test
void findAll() {
assertThatCode(repo::findAll).doesNotThrowAnyExceptions();
}
}
Тем не менее, я не могу доставить эту настройку TestContainer в отдельный файл, который управляется @mytestconfig , самое близкое, что я хотел избежать, если это возможно, это возможно Создание абстрактного тестового класса < /p>

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

abstract class AbstractMyTest {
@Container
private static final MySQLContainer MYSQL_CONTAINER =
new MySQLContainer(
DockerImageName.parse("library/mariadb")
.asCompatibleSubstituteFor("mysql"));

@DynamicPropertySource
static void mysqlProperties(DynamicPropertyRegistry registry) {
registry.add("spring.datasource.url", MYSQL_CONTAINER::getJdbcUrl);
registry.add("spring.datasource.username", MYSQL_CONTAINER::getUsername);
registry.add("spring.datasource.password", MYSQL_CONTAINER::getPassword);
}
}
< /code>
Я думаю, что это может быть что -то вроде создания класса расширения JUNIT, а не использования пружинных аннотаций. < /p>
Просто примечание i ' M по -прежнему на Spring Boot 2.7.18, поэтому у меня нет аннотации @ServiceContainer 
.

Подробнее здесь: https://stackoverflow.com/questions/794 ... -i-can-use

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