Spring JUnit 5 ExtendWith TestContainer
Posted
技术标签:
【中文标题】Spring JUnit 5 ExtendWith TestContainer【英文标题】: 【发布时间】:2021-10-27 15:35:53 【问题描述】:我正在尝试重新利用一个容器,并且我正在尝试使用 JUnit5 ExtendWith 功能,但我仍然得到:
与 localhost:5432 的连接被拒绝。
如果我在每个测试中都有相同的逻辑,那么一切都会按预期工作。
@Testcontainers
@SpringBootTest
@ExtendWith(PostgresTestContainersExtension.class)
public class ApplicationJUnit5Test
@Autowired
private HeroClassicJDBCRepository repositoryUnderTest;
@Test
public void test1()
System.out.println("junit version: " + Version.id());
Collection<Hero> heroes = repositoryUnderTest.allHeros();
assertThat(heroes).hasSize(1);
repositoryUnderTest.addHero(new Hero("bb", "bb"));
Collection<Hero> heroesAfter = repositoryUnderTest.allHeros();
assertThat(heroesAfter).hasSize(2);
扩展:
public class PostgresTestContainersExtension implements BeforeAllCallback,
BeforeTestExecutionCallback
private static final String IMAGE_NAME = "registry.mycomp.com/db/mariadb:10.4.11";
@DynamicPropertySource
static void properties(DynamicPropertyRegistry registry)
registry.add("spring.datasource.url", container::getJdbcUrl);
registry.add("spring.datasource.password", container::getPassword);
registry.add("spring.datasource.username", container::getUsername);
@Container
public static PostgreSQLContainer container = new PostgreSQLContainer()
.withUsername("duke")
.withPassword("password")
.withDatabaseName("test");
@Override
public void beforeAll(ExtensionContext extensionContext)
startContainerIfNeed();
@Override
public void beforeTestExecution(ExtensionContext extensionContext)
startContainerIfNeed();
public void startContainerIfNeed()
if (!container.isRunning())
container.start();
【问题讨论】:
【参考方案1】:据我所知@DynamicPropertySource
只能在测试类本身或超类中使用。您必须将 properties 方法移过来。
【讨论】:
以上是关于Spring JUnit 5 ExtendWith TestContainer的主要内容,如果未能解决你的问题,请参考以下文章
@ExtendWith(SpringExtension.class) 不工作
何时使用 @RunWith 以及何时使用 @ExtendWith
未解决的参考:SpringExtension 使用 @ExtendWith 注释
无法在使用 @ExtendWith(SpringExtension.class) 运行的 Spring Boot 单元测试中注入应用程序上下文