繁体   English   中英

SolrPing.Process:检查的异常对此方法无效

[英]SolrPing.Process: Checked exception is invalid for this method

我正在测试solr ping调用的异常条件。 这是代码片段。 Solrj版本5.2.0

@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方法调用移到受保护的方法中,并根据需要使用spy存根。

当然,它不如PowerMock真实的交互模拟强大,它还需要创建一个可见的程序包伪方法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM