如何确保@SpyBean仅用于给定测试而不用于其他测试

时间:2017-03-23 12:56:52

标签: spring-test spring-boot-test

我希望@SpyBean仅用于一次测试而不被其他人使用。我使用 spring boot 1.4.4

我试图依赖配置。我希望间谍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类的现有配置中,但不能完全替换它们。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

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