Easymock:如何在不可见的情况下模拟受保护方法的调用
Posted
技术标签:
【中文标题】Easymock:如何在不可见的情况下模拟受保护方法的调用【英文标题】:Easymock: How to mock call on protected method with no visibility 【发布时间】:2013-10-23 08:47:19 【问题描述】:我正在使用 apache httpclient-4.0.1
从我的应用程序中进行 Rest 调用,在我尝试为此创建单元测试之前一切正常。我正在使用easymock
,当我尝试模拟我的DefaultHttpClient.execute(HttpUriRequest)
时,出现以下错误。
java.lang.IllegalStateException: missing behavior definition for the preceeding method call createHttpContext()
我查看了代码,似乎在 execute(HttpUriRequest)
方法上调用了这个方法 (createHttpContext()
),但它是一个 protected
方法,所以我看不到它。
那么你如何模拟这个调用呢?
【问题讨论】:
【参考方案1】:原则上,您应该只模拟您的 SUT 在其协作者身上调用的方法。如果你需要模拟你的 SUT 没有直接调用的东西,那么你做错了。
如果问题是您需要模拟静态调用,有几种解决方案。
将静态调用提取到 SUT 中的不同方法并测试 SUT 的部分模拟版本(仅模拟完成静态调用的新方法)。 Partial mocks using easymock 使用 PowerMock 并直接模拟静态调用。【讨论】:
以上是关于Easymock:如何在不可见的情况下模拟受保护方法的调用的主要内容,如果未能解决你的问题,请参考以下文章
PHP7.3:如何在不使它在子类中重新声明的情况下,以最窄的范围继承一个受保护的静态属性?
在不安装 Java 的情况下将受密码保护的 xlsx 文件读入 R(密码已知)
基类有没有办法在不污染 .h 文件的情况下声明受保护的变量?