@TestInstance注释在 JUnit 5 中有什么用?
您能简单解释一下注释,以及它在 JUnit 5 中的用处吗?@TestInstance
我认为我们可以通过使我们的字段静态
来达到相同的效果。
您能简单解释一下注释,以及它在 JUnit 5 中的用处吗?@TestInstance
我认为我们可以通过使我们的字段静态
来达到相同的效果。
我认为这些文档提供了一个有用的摘要:
如果您希望 JUnit Jupiter 在同一个测试实例上执行所有测试方法,只需使用 @TestInstance(Lifecycle.PER_CLASS) 注释测试类即可。使用此模式时,将为每个测试类创建一次新的测试实例。因此,如果您的测试方法依赖于实例变量中存储的状态,则可能需要在@BeforeEach或@AfterEach方法中重置该状态。
与默认的“每方法”模式相比,“每类”模式具有一些额外的好处。具体来说,使用“每类”模式,可以在非静态方法以及接口默认方法上声明@BeforeAll和@AfterAll。因此,“每类”模式还可以在@Nested测试类中使用@BeforeAll和@AfterAll方法。
但是,您可能已经阅读了该内容,并且您正确地认为,使字段成为静态字段将具有与将字段声明为实例变量并使用 相同的效果。@TestInstance(Lifecycle.PER_CLASS)
因此,也许“它在JUnit 5中如何有用”这个问题的答案是使用...@TestInstance
@TestInstance
引入此批注是为了减少运行单元测试时创建的对象数。
添加到测试类将避免为类中的每个测试创建类的新实例。当您在同一测试类中有很多测试并且该类的实例化成本高昂时,这尤其有用。@TestInstance(TestInstance.Lifecycle.PER_CLASS)
应谨慎使用此注释。所有单元测试都应该是隔离的,并且彼此独立。如果其中一个测试更改了测试类的状态,则不应使用此功能。
使字段静态以达到相同的效果不是一个好主意。它确实会减少创建的对象数,但是当执行测试类中的所有测试时,无法清理它们。当您拥有一个巨大的测试套件时,这可能会导致问题。