我可以模拟使用juni5,mockito或easymock的静态方法吗?

时间:2019-05-15 15:18:58

标签: mocking mockito easymock

我需要使用junit5 (这很重要)和模仿或easymock来模拟静态方法。 我看到powermock仅适用于junit 4。 是否有任何形式可以与junit5一起使用?

2 个答案:

答案 0 :(得分:1)

没有PowerMock不可能模拟静态方法。而且,当您需要PowerMock时,这意味着无法以可测试的方式正确开发代码。我正在使用Java 11,JUnit 5和Mockito开发一个项目。 PowerMock完全不支持此功能。而且我怀疑它是否会支持它。

这就是说:使其可测试的唯一方法是将带静态方法的类注入到您需要测试的类中,然后用模拟替换测试范围中Bean的实现。注入时,您将拥有一个活动对象,因此不再需要静态方法。

更改代码和使用注入框架(如Spring)具有好处。我知道有些情况下您不能仅仅这样做。如果您真的无法更改实现,则只需保留其原样,然后进行大量的单元测试,以使用各种参数单独测试静态方法。只是为了确保此类能按预期工作。

答案 1 :(得分:0)

据我所知并非如此。最简单的方法是使用非静态方法对其进行屏蔽。

  Enter ISBN to update: <input type="text" name="isbn" placeholder="Enter ISBN..."> <br><br>
  Title <input type="text" name="titleUpdate " placeholder="Enter Updated Title..."> <br><br>
  Author <input type="text" name="authorUpdate" placeholder="Enter Updated Author..."> <br><br>
  Genre <input type="text" name="genreUpdate" placeholder="Enter Updated Genre..."< <br><br>
  Year Published <input type="text" name="yearUpdate" placeholder="Enter Updated Year..."<br><br>
  <!--ISBN <input type="text" name="isbnUpdate" placeholder="First name"<br><br>-->

将成为

public class A {
    void foo() {
        Stuff s = MyClass.getStuff();
    }
}

然后您嘲笑public class A { private final StuffProxy stuffProxy; public A(StuffProxy stuffProxy) { this.stuffProxy = stuffProxy; } public A() { this(new StuffProxy()); } void foo() { Stuff s = stuffProxy.get(); } } public class StuffProxy { public Stuff get() { return MyClass.getStuff(); } }