@BeforeAll方法作为非静态方法

50
我能够使用@BeforeAll注解实现一个非静态的setup方法。 它似乎正常工作,因为它只被调用一次。 我有点困惑,因为@BeforeAll的文档说方法必须是静态的。有人能解释一下为什么我的设置仍然有效吗?
我的代码:
@TestMethodOrder(OrderAnnotation.class)
@SpringJUnitWebConfig(locations = { "classpath:service.xml" }) 
@TestInstance(Lifecycle.PER_CLASS)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented 
@Inherited 
public class MyTest {
    @BeforeAll
    public void setup() throws Exception {...}
}

请展示您的完整代码。 - johanneslink
如果给出的答案没有澄清您的问题,那么您应该展示完整的代码,其中包括至少一个带有导入和注解的完整测试类。为什么呢?因为任何细节都可能影响结果。 - johanneslink
我已经添加了我使用的注释。谢谢。 - Meera
实际上,它们揭示了正在发生的事情 :-) - johanneslink
2个回答

78

您只需要在包含@BeforeAll方法的测试类上注释下面的代码片段,就可以开始了。

@TestInstance(Lifecycle.PER_CLASS)

1
另一个选项是:添加文件junit-platform.properties并编写:junit.jupiter.testinstance.lifecycle.default = per_class - Yani Morales

40

2
我使用了@TestInstance(Lifecycle.PER_CLASS)。现在我知道这就是允许我运行非静态@BeforeAll方法的原因。谢谢! - Meera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接