我必须为我的代码编写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