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
调用本身时,为什么它会进行更深层次的调用。
我会考虑改变方法。我会将对 Solr
的方法调用移动到受保护的方法中,并根据需要使用 spy
存根。
当然它不如 PowerMock
真正的交互模拟强,而且它需要创建一个包可见的虚拟方法。
但这对我们来说是必要的,因为我们与其他测试框架有冲突,这成为我接受和喜欢的习惯,因为我不再需要 PowerMock
您尝试模拟的方法
public final T process(SolrClient client, String collection)
被标记为 final
,不能被 Mockito
模拟。请改用 PowerMockito
来模拟 static
或 final
的方法。
我正在测试 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
调用本身时,为什么它会进行更深层次的调用。
我会考虑改变方法。我会将对 Solr
的方法调用移动到受保护的方法中,并根据需要使用 spy
存根。
当然它不如 PowerMock
真正的交互模拟强,而且它需要创建一个包可见的虚拟方法。
但这对我们来说是必要的,因为我们与其他测试框架有冲突,这成为我接受和喜欢的习惯,因为我不再需要 PowerMock
您尝试模拟的方法
public final T process(SolrClient client, String collection)
被标记为 final
,不能被 Mockito
模拟。请改用 PowerMockito
来模拟 static
或 final
的方法。