Easymock:如何在没有可见性的情况下模拟对受保护方法的调用

时间:2013-10-15 13:54:14

标签: java unit-testing junit protected easymock

我正在使用apache httpclient-4.0.1从我的应用程序进行Rest调用,这一切正常,直到我尝试为此创建单元测试。我正在使用easymock,当我尝试模仿我的DefaultHttpClient.execute(HttpUriRequest)时,我收到以下错误。

java.lang.IllegalStateException: missing behavior definition for the preceeding method call createHttpContext()

我已经查找了代码,看起来这个方法(createHttpContext())在execute(HttpUriRequest)方法上被调用,但它是protected方法,所以我对它没有可见性。

那你怎么嘲笑这个电话?

1 个答案:

答案 0 :(得分:1)

原则上,您应该只模拟SUT在其协作者上调用的方法。如果你需要模拟一些你的SUT没有直接调用的东西那么你就是做错了。

如果问题是您需要模拟静态调用,则有几种解决方案。

  • 将静态调用解压缩到SUT中的另一个方法,并测试SUT的部分模拟版本(仅模拟静态调用完成的新方法)。 Partial mocks using easymock
  • 使用PowerMock并直接模拟静态调用。