Spring Boot 为什么用junit测试重装类?

y1aodyip  于 2022-11-23  发布在  Spring
关注(0)|答案(1)|浏览(123)

我已经注意到在我的单元测试中final字段被重新加载的行为,实际上整个类都这样做了(它的hashcode改变了)
示例:

class SomeTest {

    private final String aRandomString  = RandomStringUtils.randomAlphabetic(10);

    @Test
    void a() {
    }

    @Test
    void b() {
    }
}

aRandomString方法a和B的变化。

为什么会这样 * 以及 * 有什么方法可以防止这种情况发生吗?(我的问题现在更加理论化,没有一个特定的用例ATM)

我的POM只有这些测试依赖项:

<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-core</artifactId>
    <version>${assertj-core.version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

先谢谢你了

wgxvkvu9

wgxvkvu91#

因为默认的TestInstance生命周期是PER_METHOD。
那就是说你每一个测试方法都有每一个瞬间。
所以最快答案是添加TestInstance注解。

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class yourTest {
    ...
}

但是这个解决方案必须注意不要违反FIRST单元测试原则。

相关问题