我希望@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
类添加到BaseApplicationTest
和BaseTest
类的现有配置中,但不能完全替换它们。
有人可以帮忙吗?
答案 0 :(得分:0)
用@DirtiesContext注释测试类将标记应用程序上下文为已销毁,以便下一个测试类重新创建它。新的应用程序上下文不应再具有@SpyBean。