Mockito @SpyBean注释与SpringRunner

时间:2018-06-05 18:30:18

标签: 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 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.JdbcRepository不能有现有值

但是,我找到了几种避免错误的方法:

  • 当" @RunsWith(SpringRunner.class)"被删除,测试似乎运行正常。但是,我读过的很多文档似乎表明这是必需的
  • 添加" @SpyBean(JdbcRepository.class)"并且自动装配jdbcRepository似乎也可以工作。也许这是一个上下文问题,它试图多次实例化一个JdbcRepository实例?

简而言之,我不确定为什么我的测试会抛出BeanCreationException。在类成员之上的@SpyBean注释不是使用间谍bean的正确方法吗?

0 个答案:

没有答案