通常,Powermock允许我们模拟/添加静态行为或状态。例如,我们可以模拟实用程序类的静态方法,例如public static String buildKeyFrom(...) {...}
并覆盖其行为。甚至在目标类尝试使用类new MyService(...)
powermock API用法的个示例:
when(StorageKeyUtils.buildKey(id, group, suffixes)).thenReturn("my:group-test:an-id:suffix1")
whenNew(MyParser.class).withArguments(factory).thenReturn(parserMock)
而且...它起作用了,实际上它有助于避免重构以提高代码的可测试性。您不再需要将静态行为提取到单独的类中,也无需引入工厂来实例化新对象等等。
但是,Powermock也有缺点:
@PrepareForTest
和PowerMock.mockStatic(..)
。尝试记住注释和mockStatic
内部要描述的类,而不检查先前实现的测试或文档。
有时,即使您仍尝试模拟静态方法,它也可以在没有mockStatic
的情况下工作。
当然,我们可以花一些时间研究文档以澄清所有问题... powermock mbeanserver
...为什么powermockito试图滥用mbeanserver
并迫使我们用@PowerMockIgnore
标记测试集?自2013年以来。Bot有时可以正常运行而不会排除,为什么? -idk 总体上,我会说是的,我们应该避免使用Powermock。我看到一个令人怀疑的案例-您没有时间进行适当的代码设计,以使其在没有power-mockito()的情况下也足够可测试,但是,如果您没有时间进行测试,您是否真的需要那种测试质量?代码设计?)
您怎么看?您是否定期使用Powermock?在项目上使用Powermock时是否遵守一些规则?
答案 0 :(得分:3)
通常,干净的代码不需要powermock进行测试。因为干净的代码支持依赖注入,所以松散耦合并且易于单元测试,因此不依赖静态方法。
传统/肮脏的代码充满了静态方法,紧密耦合且不支持依赖注入。在这些旧代码库中,您需要使用powermock进行测试
答案 1 :(得分:0)
我不推荐PowerMock,但生活并不总是如我们所愿,有时候您进入的项目,例如,它没有遵循最佳编程实践,那么我认为PowerMock是可以接受的。问题有点太广泛了。