gpt4 book ai didi

Spring boot @SpyBean 导致测试套件出错,可能是由于上下文未重置的问题

转载 作者:行者123 更新时间:2023-12-04 14:26:12 30 4
gpt4 key购买 nike

我有一个 Spring 集成测试的问题。

行为:

  • 当我单独运行下面的测试时,它成功了。
  • 但是,当所有测试都运行时,包括以下测试在内的许多测试都出错了。
  • 当我忽略下面的测试并运行所有测试时,一切都成功了。

  • 我没有包含错误堆栈跟踪,因为它与我们的业务逻辑高度相关,我怀疑该错误与我使用 spring boot test @SpyBean 相关。 .

    这是测试:
    @RunWith(SpringRunner.class)
    @ActiveProfiles(profiles = "test")
    @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)

    ...

    @Autowired
    private TestRestTemplate restTemplate;

    @Autowired
    private DataKeyStore dataKeyStore;

    @SpyBean
    private TokenTools tokenTools;

    ...

    @Test
    public void myTest() throws Exception {

    doReturn("someGeneratedToken")
    .doReturn("someGeneratedToken")
    .doCallRealMethod()
    .when(tokenTools)
    .createToken(any(TokenProfile.class), anyString(), anyString());
    ...

    请注意 DataKeyStoreTokenTools 的依赖项.

    正如我上面所说的,我怀疑测试会相互影响我的 @SpyBean不知何故在其他测试类上泄漏......

    我的问题是如何确保此测试不会踩到其他测试?我试过 @DirtiesContext注释无济于事...

    同样令我困惑的是 @SpyBean已经重置(根据文档/javadoc)。

    有人可以帮忙吗?

    编辑 : 使用我的 IDE 调试测试表明 TokenTools对于所有测试仅实例化两次:一次在测试初始化​​时,第二次用于创建 @SpyBean对于上面的测试。在上述测试之后运行的其余测试使用第二个实例,即 @SpyBean实例...

    最佳答案

    我最近遇到了同样的问题。确保为您设置正确的 classMode@DirtiesContext注解。

    默认情况下,@DirtiesContext将重置 @SpyBean完成测试课后。您可能希望在每个测试方法之前或之后重置它。

    所以加@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)到您的测试类。

    关于Spring boot @SpyBean 导致测试套件出错,可能是由于上下文未重置的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42971221/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com