使用 Spring Boot 应用启动 junit 测试用例时如何忽略租户配置

问题描述 投票:0回答:1

当我启动 Spring Boot 应用程序时,我使用此代码将应用程序设置为忽略租户:

CommonContext.setTenantIgnore(true);

这个效果很好。然后我写了一个JUnit测试用例,我还需要使用

CommonContext.setIgnoreTenant(true)
忽略租户,我已经尝试过这样的:

    @BeforeAll
    public static void before() {
        CommonContextHolder.setTenantIgnore(true);
    }

    @BeforeEach
    void init() {
        CommonContextHolder.setTenantIgnore(true);
    }

    @Before
    public void setup() {
        CommonContextHolder.setTenantIgnore(true);
    }

也尝试过这样的:

@SpringJUnitConfig
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class TenantIgnore {
    @BeforeAll
    public static void setUp() {
        CommonContextHolder.setTenantIgnore(true);
    }
}

也不起作用。在开始所有单元测试之前我应该做什么来设置租户忽略?我认为它应该在 JUnit 应用程序启动之前(或在 spring 容器启动之前),在所有测试类之前。

java spring spring-boot junit
1个回答
0
投票

我看到的基本问题是,您在静态上下文中使用 CommonContextHolder 和 CommonContext,而 Spring 并不是为“处理”静态上下文而设计的......简单地说。

您所写的 Spring 上下文在单元测试中也不存在(此处为 junit5)。

如果您想在测试用例中利用 Spring 上下文,您应该使用 @SpringBootTest 调用测试。这还将把所有带有 Spring 注解的 Bean 加载到测试上下文中。只有这样您才能在测试设置方法中访问这些类。 但它们不可能是静态的。为了简单起见,请避免在 Spring Boot 应用程序中使用静态类。

如果您希望租户标志在运行时、测试或生产期间可编辑,则需要创建该类的实例。 Spring Boot 会做到这一点。只需在类级别添加 @Component 注释即可。将 @SpringbootTest 注解添加到您的测试中,删除其他注解。

您可以在设置方法和运行时获取设置的租户上下文。提供 Getter 和 Setter。

在单元测试环境中提供可用上下文的另一种方法是像 Mockito 这样的 Mock。

你必须知道单元测试只是为了测试简单、小型和专用的代码部分。 Spring 上下文通常不属于单元测试上下文。所以你必须嘲笑它。

© www.soinside.com 2019 - 2024. All rights reserved.