首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >春启动测试.豆的tearDown

春启动测试.豆的tearDown
EN

Stack Overflow用户
提问于 2019-02-28 21:50:24
回答 1查看 3.2K关注 0票数 2

我使用@EmbeddedKafka注释如下:

代码语言:javascript
复制
@ExtendWith(SpringExtension.class)
@SpringBootTest
@EmbeddedKafka(partitions = 1,
    topics = {"topic"},
    brokerProperties = {
        "auto.create.topics.enable=${topics.autoCreate:false}",
        "delete.topic.enable=${topic.delete:true}",
        "broker.id=2"})
public class KafkaUsersTest {
    @Autowired
    private EmbeddedKafkaBroker embeddedKafka;

    @Test
    public void test1() {
        // test something
    }

    @Test
    public void test2() {
        // test something
    }

    ...
}

现在,测试完成后,我想关闭embeddedKafka bean。就像这样:

代码语言:javascript
复制
    @AfterAll
    public void tearDown(){
        embeddedKafka.getKafkaServers().forEach(KafkaServer::shutdown);
        embeddedKafka.getKafkaServers().forEach(KafkaServer::awaitShutdown);
    }

问题是:

  • @ can方法只能是静态的。
  • 如果我使它是静态的--那么embeddedKafka也必须是静态的,那么@Autowired注释就不能工作了。

我想我可以将bean从一个测试中转到一个静态字段,然后在tearDown()中使用它,但它真的很难看。

在所有测试完成之后,关闭bean一次的“良好实践”是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-01 17:26:24

@ can方法只能是静态的。

那是胡说。

来自JUnit 5用户指南

表示在当前类中的所有@Test、@RepeatedTest、@ParameterizedTest和@TestFactory方法之后都应该执行带注释的方法;类似于JUnit 4的@AfterClass。这些方法是继承的(除非它们被隐藏或重写),并且必须是静态的(除非使用了“每类”测试实例生命周期)。

如果使用@AfterAll,则@TestInstance(Lifecycle.PER_CLASS)方法可以是非静态的。这在JUnit 5用户指南中也有记录。

“每类”模式比默认的“每种方法”模式有一些额外的好处。具体来说,使用“每类”模式,可以在非静态方法和接口默认方法上声明@BeforeAll和@class。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54934830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档