SolrPing.进程:检查异常对该方法无效



我正在测试solr ping调用的异常条件。下面是代码片段。

@Test
public void testPingSolrWhenServerDown2() throws Exception {
  pingSolr = new PingSolr();
  SolrClient mockedSolrClient = Mockito.mock(SolrClient.class);
  SolrPing mockedSolrPing = Mockito.mock(SolrPing.class);
  PowerMockito.whenNew(SolrPing.class).withNoArguments().thenReturn(mockedSolrPing);
  Mockito.doThrow(new IOException()).when(mockedSolrPing).process(mockedSolrClient);
  pingSolr.ping(mockedSolrClient);
}

我得到以下错误:

org.mockito.exceptions.base.MockitoException: 
Checked exception is invalid for this method!
Invalid: java.io.IOException
    at org.apache.solr.client.solrj.request.SolrPing.createResponse(SolrPing.java:36)
    at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:134)
    at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:152)
    at c.i.j.s.i.PingSolrTest.testPingSolrWhenServerDown2(PingSolrTest.java:65)

这是说IOException是一个无效的检查异常,这是不允许的mockito。在另一个测试用例中,SolrServerException也发生了同样的情况。

但是SolrPing.process方法(从SolrRequest扩展而来)确实会抛出异常。SolrRequest.process .

我观察到createResponse没有抛出任何异常。但是当我嘲笑process调用本身时,为什么它要去更深入的调用

您试图模拟的方法

public final T process(SolrClient client, String collection)

被标记为final,不能被Mockito模拟。使用PowerMockito来模拟staticfinal的方法。

我会考虑改变这种方法。我会将对Solr的方法调用移到protected方法中,并根据需要将spy存根。

当然,它没有PowerMock真正的交互mock那么强,而且它需要创建一个虚拟的方法,这个方法是包可见的。

但这对我们来说是必要的,因为我们与其他测试框架有冲突,它成为我接受和喜欢的习惯,因为我不再需要PowerMock

相关内容

  • 没有找到相关文章

最新更新