【发布时间】:2016-12-07 09:39:50
【问题描述】:
public static ResponseBean call(Bean bean) throws Exception {
// statements...
IgnoreCall.ignoreMethodCall(bean);
// statements...
// return
}
使用上面的代码sn-p,是否可以测试忽略IgnoreCall.ignoreMethod(Bean)调用的方法,而不需要将整个语句置于布尔条件下?
这里是单元测试代码sn-p:
@RunWith(PowerMockRunner.class)
@PrepareTest
public ClassHelperTest {
@Test
public void testCall() throws Excpetion {
// stubbing...
ResponseBean responseBean = ClassHelper.call(bean);
// verify/ies
// assert/s
}
}
注意事项:
- 应该避免重构
ClassHelper.call(Bean)。即使是糟糕的 OO 设计,重构也是昂贵的。 - 除非另一种模式适用于替换,否则方法签名被锁定。
- 尝试在目标静态方法上使用
Mockito.when和PowerMockito.when,存根在运行时调试中不起作用。
【问题讨论】:
-
事情是:static是OO设计的异常;正如您刚刚注意到的:它使您的代码更更难进行测试。 PowerMock 可以“修复”这个问题;但我宁愿建议您更改生产代码。没有静态调用,没有这样的问题。
-
如果重构很容易,我会做到的。不幸的是,由于手头的 OO 设计很差,我被困在了这个问题上。你说的是
PowerMock can fix that problem,愿意分享一下吗? -
感谢您的回答,但删除参数对我来说不是一个好方法。有没有可能构建模式会做?
-
不用担心。没有在生产代码上工作,但在我做的 sn-p 上工作。回过头来看,它不适用的原因是
IgnoreCall.ignoreMethodCall(Bean)有一系列内部静态方法调用(超出本问题的范围)。 -
我将尝试打开另一个模仿生产中的问题。我给你一个帖子。抱歉,我使用 RSS 访问 SO,所以我没有收到强制通知来奖励它,尽管赏金在我这边被扣除了。
标签: junit mockito powermock powermockito