模拟相同方法多次返回null

时间:2020-01-28 12:49:51

标签: mocking mockito junit4

我必须为我的代码编写jUnit,在这里我们要使用来自Lucene DB的相同方法从不同的索引中获取数据。我需要模拟执行查询以获取数据的方法,我将索引名称作为方法参数的一部分传递。第一次调用已按预期进行了模拟,但是第二次调用返回null,导致我的代码得到NPE。

doReturn(responseIndexA).when(emailSenderDao).getQueryResults(Mockito.any(BoolQueryBuilder.class), Mockito.eq("IndexA"),
                Mockito.anyInt(), Mockito.anyInt(), Mockito.any(String[].class), Mockito.any(String[].class));

        doReturn(responseIndexB).when(daoObject).getQueryResults(Mockito.any(BoolQueryBuilder.class), Mockito.eq("IndexB"),
                Mockito.anyInt(), Mockito.anyInt(), Mockito.any(String[].class), Mockito.any(String[].class));

        doReturn(responseIndexC).when(daoObject).getQueryResults(Mockito.any(BoolQueryBuilder.class), Mockito.eq("IndexC"),
                Mockito.anyInt(), Mockito.anyInt(), Mockito.any(String[].class), Mockito.any(String[].class));

我也尝试使用when(method call).thenReturn(response),但是遇到了同样的问题。 也尝试过

`

when(daoObject.getQueryResults(Mockito.any(BoolQueryBuilder.class), Mockito.anyString(),
                Mockito.anyInt(), Mockito.anyInt(), Mockito.any(String[].class), Mockito.any(String[].class))).
        thenAnswer(inv -> {
            String indexName = (String) inv.getArguments()[1];
            if(indexName.equalsIgnoreCase("IndexA")) {
                return responseIndexA;
            }else if(indexName.equalsIgnoreCase("IndexB")) {
                return responseIndexB;
            } else {
                return responseIndexC;
            }
        });`

当我运行单个类时,它在所有情况下都可以正常运行,但是当它在maven安装或以jUnits进行覆盖时运行时,会遇到NPE问题。 Jacoco插件 `

<plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${jacoco.maven.plugin.version}</version>
                <configuration>
                    <excludes>
                        <exclude>{packages}</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <execution>
                        <id>jacoco-initialize</id>
                        <phase>initialize</phase>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <propertyName>jacoco.agent.argLine</propertyName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>jacoco-report</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>`

JUnit版本-4.12

0 个答案:

没有答案