Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mockito@SpyBean注释与SpringRunner冲突_Java_Spring_Junit_Mocking_Mockito - Fatal编程技术网

Java Mockito@SpyBean注释与SpringRunner冲突

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

我目前正试图创建一个存储库的部分模拟,但每当我试图用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.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?