2

我希望 a@SpyBean仅由一个测试使用,而不被其他测试使用。我使用弹簧靴 1.4.4

我试图依赖配置。我希望 spy bean 仅供RegenerateTokenOnCollisionIT.

这是我尝试过的:

@TestConfiguration
@Import(RegenerateTokenOnCollisionIT.Config.class)
public class RegenerateTokenOnCollisionIT extends BaseApplicationTest {

    @Autowired
    private TestRestTemplate restTemplate;

    @Autowired
    private TokenTools tokenTools;

    @Test
    public void findOrCreateTokensShouldRetryOnCollision() throws PciSecurityException {

        //Will be inserted
        doReturn("someGeneratedToken")
                //Will conflict
                .doReturn("someGeneratedToken")
                //Real method will then be used by retry
                .doCallRealMethod()
                .when(tokenTools)
                .createToken(any(TokenProfile.class), anyString(), anyString());

      ...
    }

    @TestConfiguration
    static class Config {
        @SpyBean
        private TokenTools tokenTools;

    }

}

这是BaseApplicationTest课程:

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public abstract class BaseApplicationTest extends BaseTest {

}

BaseTest班级:

@RunWith(SpringRunner.class)
@ActiveProfiles(profiles = "test")
public abstract class BaseTest {
...

当然,我希望将上述Config类添加到现有的配置BaseApplicationTestBaseTest类中,但不要完全替换它们。

有人可以帮忙吗?

4

1 回答 1

0

使用 @DirtiesContext 注释测试类将标记要销毁的应用程序上下文,以便下一个测试类将重新创建它。新的应用程序上下文不应该有 @SpyBean 了。

于 2018-11-05T22:17:11.217 回答