Java Mockito@SpyBean注释与SpringRunner冲突
我目前正试图创建一个存储库的部分模拟,但每当我试图用SpyBean注释JDBC存储库时,就会遇到问题Java Mockito@SpyBean注释与SpringRunner冲突,java,spring,junit,mocking,mockito,Java,Spring,Junit,Mocking,Mockito,我目前正试图创建一个存储库的部分模拟,但每当我试图用SpyBean注释JDBC存储库时,就会遇到问题 @RunsWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = ServiceApplication.class) @ActiveProfiles("unit-test") public abstract class TestBa
@RunsWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = ServiceApplication.class)
@ActiveProfiles("unit-test")
public abstract class TestBase {
@SpyBean
protected JdbcRepository jdbcRepository;
@Before
public void baseSetUp() throws Exception {
MockitoAnnotations.initMocks(this);
this.testContextManager = new TestContextManager(getClass());
this.testContextManager.prepareTestInstance(this);
this.classLoader = getClass().getClassLoader();
...
}
运行应用程序时,我收到以下消息:
org.springframework.beans.factory.BeanCreationException:无法注入字段:protected com.sample.app.jdbc存储库不能具有现有值
但是,我找到了一些避免错误的方法:
- 删除“@RunsWith(SpringRunner.class)”后,测试似乎运行良好。然而,我读过的很多文档似乎都表明这是必需的
- 添加了“@SpyBean(jdbcreepository.class)”,自动连接jdbcreepository似乎也能工作。也许这是一个上下文问题,它试图多次实例化JdbcRepository的一个实例
简而言之,我不知道为什么我的测试抛出BeanCreationException。类成员上方的@SpyBean注释不是使用spy bean的正确方法吗?请在不使用此行的情况下重试
MockitoAnnotations.initMocks(this)代码>不,相同的错误。为什么要绕过/破解TstContext
框架?你基本上是在重复已经完成的所有工作?为什么?你正试图超越框架,这正是它让你心痛的地方。基本上一起删除baseSetUp
(或者至少是您干扰Mockito和Spring Test ConfText框架的部分。我相信我调用TestContext的原因是,我正试图将此基类用于参数化和非参数化测试用例。这是否意味着如果我不使用SpringRunner运行测试,我就不需要logibaseSetUp中的c?