前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JUnit 5 测试问题 must be static unless the test class is

JUnit 5 测试问题 must be static unless the test class is

原创
作者头像
HoneyMoose
修改2020-09-15 10:01:36
1.8K0
修改2020-09-15 10:01:36
举报
文章被收录于专栏:CWIKIUSCWIKIUS

在运行测试的时候提示下面的错误:

代码语言:javascript
复制
org.junit.platform.commons.JUnitException: @BeforeAll method 'protected void com.ossez.edtestbank.tests.QuestionTest.setUp() throws java.lang.Exception' must be static unless the test class is annotated with @TestInstance(Lifecycle.PER_CLASS).

测试实例生命周期

为了允许隔离执行单个的测试方法,并避免由于可变测试实例状态而产生的意外副作用,JUnit在执行每个测试方法之前创建每个测试类的新实例(请参阅下面的讲解,何为测试方法)。这个”per-method”测试实例生命周期是 JUnit Jupiter 中的默认行为,类似于JUnit以前的所有版本。

如果您希望JUnit Jupiter在同一个测试实例上执行所有测试方法,只需使用 @TestInstance(Lifecycle.PER_CLASS) 对您的测试类进行注解即可。当使用这种模式时,每个测试类将创建一个新的测试实例。因此,如果您的测试方法依赖于存储在实例变量中的状态,则可能需要在 @BeforeEach 或 @AfterEach 方法中重置该状态。

“per-class”模式比默认的”per-method”模式有一些额外的好处。具体来说,使用”per-class”模式,可以在非静态方法和接口默认方法上声明 @BeforeAll 和 @AfterAll(否则@BeforeAll与@AfterAll必须是注解在static的方法上才能生效) 。因此,”per-class”模式也可以在 @Nested 测试类中使用 @BeforeAll 和 @AfterAll 方法。

如果使用Kotlin编程语言编写测试,则可能会发现,通过切换到”per-class”测试实例生命周期模式,可以更轻松地实现 @BeforeAll 和 @AfterAll 方法。

使用静态方法

因为下面的方法:

代码语言:javascript
复制
	@BeforeAll
	protected void setUp() throws Exception {
		Factory.beginTransaction();
	}

没有使用静态方法,所以提示上面的错误,你可用使用静态方法后运行。

你的测试方法应该不会提示错误。

Lifecycle.PER_METHOD

在方法中使用

代码语言:javascript
复制
@TestInstance(TestInstance.Lifecycle.PER_METHOD)

来定义测试。

junit5-testing-01
junit5-testing-01

使用上面的方法就可以让你的测试执行了。

https://www.ossez.com/t/junit-5-throws-java-lang-exception-must-be-static-unless-the-test-class-is-annotated-with-testinstance-lifecycle-per-class/489

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试实例生命周期
    • 使用静态方法
      • Lifecycle.PER_METHOD
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档