【发布时间】:2021-04-01 14:34:16
【问题描述】:
我是 Mockito 框架的新手,我正在为包含 ElasticClient 的类编写测试。下面是我的实际方法:
@Service
@Slf4j
public class CreateIndex {
private final RestHighLevelClient elasticClient;
@Autowired
public IndexService(final RestHighLevelClient elasticClient) throws IOException {
this.elasticClient = elasticClient;
}
public boolean createIndex(String id, String index) {
try {
IndexRequest request = new IndexRequest(index);
request.id(id);
elasticClient.index(request, RequestOptions.DEFAULT);
return true;
} catch (IOException e) {
log.warn(e.getMessage());
}
return false;
}
我的测试代码如下所示:
public class TestCreateIndex {
CreateIndex createIndex;
@Mock
RestHighLevelClient elasticClient;
@Rule
public MockitoRule rule = MockitoJUnit.rule();
@Before
public void before() throws IOException {
createIndex = new CreateIndex(elasticClient);
}
@Test
public void TestCreateIndex() throws IOException {
IndexRequest request = new IndexRequest("1");
request.id("1");
Mockito.when(elasticClient.index(request,(RequestOptions.DEFAULT))).thenReturn(indexResponse);
}
}
对于Mockito.when(elasticClient.index(request,RequestOptions.DEFAULT )).thenReturn(indexResponse);(RequestOptions 是某个类)这一行,我遇到以下错误:
java.lang.NullPointerException: Cannot invoke "org.elasticsearch.client.RestClient.performRequest(org.elasticsearch.client.Request)" because "this.client" is null
at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1514)
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1484)
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1454)
at org.elasticsearch.client.RestHighLevelClient.index(RestHighLevelClient.java:871)
不确定,如何正确模拟 elasticClient。请帮忙。
【问题讨论】:
-
请向我们展示整个堆栈跟踪
-
@Lesiak 我已添加更新的堆栈跟踪,请参阅
-
任何人请帮我解决 NPE 错误! :(
-
问题是 mockito 特有的,而不是典型的 NPE,因此重新投票
标签: java unit-testing elasticsearch junit mockito