使用Springboot 3在Junit 5中编写了一个@Testcontainers测试。测试运行并通过,但我有以下警告:
'MySQLContainer<SELF>' used without 'try'-with-resources statement
但是代码实际上显示了容器没有在try with resources语句之外使用:
@Testcontainers
public class PageTemplateCreationTestContainerTests {
private static final Logger logger = LoggerFactory.getLogger(PageTemplateCreationTestContainerTests.class);
@Test
void mySQLContainerShouldBeRunning() {
try (
var mySQLContainer = new MySQLContainer<>("mysql:8.0")
.withLogConsumer(new Slf4jLogConsumer(logger))
) {
mySQLContainer.start();
assertThat(mySQLContainer.isRunning(), is(true));
}
}
}
我通读了自动关闭的文档,当然这里没有来自IntelliJ的帮助。我想它可能是在var
语法上窒息,但没有。
此警告不应出现。
1条答案
按热度按时间5us2dqdw1#
TL;DR:由于
.withLogConsumer()
链接调用,这是一个误报。IntelliJ向您显示
new MySQLContainer<>("mysql:8.0")
不是由try-with-resources块关闭的,而是您在其上调用.withLogConsumer(new Slf4jLogConsumer(logger))
并使用try-with-resources关闭它。由于关闭
.withLogConsumer(new Slf4jLogConsumer(logger))
返回的对象也会关闭MySQLContainer
(it is the same objects as it returnsthis
,因此这是一个误报。如果你想绕过这个错误而不想隐藏它,你可以尝试关闭这两个资源(这正是IntelliJ想要你做的):
然而,这会关闭它两次。或者,你可以尝试在try块中调用
withLogConsumer
,但这可能会导致在那一点上显示类似的警告。