静态方法以及如何处理它们

时间:2015-12-03 08:16:55

标签: java spring unit-testing mockito

在编写一些我发现的单元测试时,我们使用了很多来自Utility-classes的静态方法调用。现在有了Mockito,我无法嘲笑他们的召唤。那么最好的方法是什么?

我知道写了公共方法,在我刚刚返回静态调用的类中。例如:

public String getName(File file){ return PDFUtil.getName(file); }

然后我在另一个方法中调用public方法。现在我可以用Mockito和Spying来模拟getName()方法。

然而有两件事:

  1. 有冗余。我也许在其他类中使用PDFUtil.getName(File)方法,所以我应该只有一个类,并且应该只实现一次getName()。
  2. 让我们考虑一下我有4种不同的静态方法调用,并用4种不同的方法提取它们。现在这些是我无法测试的方法。这是好的,因为它说非常容易的方法,如吸气剂和定型器不应该被测试?

1 个答案:

答案 0 :(得分:0)

您可以使用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());
   }
}

注意:我实际上没有测试过这段代码。把它作为提示: - )