在编写一些单元测试时,我发现我们使用了许多来自Utility类的静态方法调用。现在有了Mockito,我无法嘲笑他们的呼唤。那么,什么是最好的方法呢?
我知道在类中编写了公共方法,在类中我只返回静态调用。例如:
public String getName(File file){ return PDFUtil.getName(file); }
然后我在另一个方法中调用公共方法。现在我可以用Mockito和Spying模拟getName()
方法了。
然而有两件事:
- 存在冗余。我可能在其他类中也使用
PDFUtil.getName(File)
方法,所以我应该只有一个类,并且应该只实现一次getName() - 让我们考虑一下,我有4个不同的静态方法调用,并用4种不同的方法提取它们。这些都是我现在无法测试的方法。既然有人说不应该测试getter和setter等非常简单的方法,那么这可以吗
您可以直接使用PowerMock模拟静态方法。假设你有这样的课程:
public class StaticMethodClass {
public String method() {
return StaticMethodClass.staticMethod();
}
public static String staticMethod() {
return "hello world";
}
}
单元测试可能看起来像这样:
@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticMethodClass.class)
public class UnitTest {
@Test
public void test() {
PowerMockito.mockStatic(StaticMethodClass.class);
PowerMock.when(StaticMethodClass.staticMethod()).thenReturn("yeah");
assertEquals("yeah", new StaticMethodClass().method());
}
}
注意:我实际上并没有测试这个代码。以它为提示:-)