小编Tum*_*mer的帖子

Mockito / PowerMock:如何在SUT中重置模拟的静态变量?

我讨厌将单元测试引入到旧版代码库中,但是我必须这样做。
到目前为止,我已经使用Mockito和PowerMock成功地将单元测试引入了旧代码库。在遇到这种情况之前,效果非常好:

在SUT中,有几个静态变量(我在PowerMock的帮助下进行了模拟,模拟了静态方法和模拟构造函数)。
现在,在第一种测试方法中,所有方法都工作正常,模拟的静态var返回了预期的输出值。
但是在随后的测试方法中,模拟的静态对象始终返回在第一个测试中设置的值,尽管我在测试之前确实对它调用过reset()。

// legacy code base:
public class SUT {
  private static Collaborator1 c1 = null;
  private static Collaborator2 c2 = null;

  public SUT(param1) {
    if (c1 == null) {
        c1 = Collaborator1.instance(param1);
        c2 = new Collaborator2(c1);
    } else {
    }
  }
}



// newly introduced unit tests:
@RunWith(PowerMockRunner.class)
@PrepareForTest({
    SUT.class,                  // to mock: new Collaborator2(..), as required by PowerMock when mocking constructors
    Collaborator1.class,        // to mock: Collaborator1.instance(..), as required by PowerMock in mocking static methods
}) …
Run Code Online (Sandbox Code Playgroud)

java mockito powermock

6
推荐指数
2
解决办法
1万
查看次数

标签 统计

java ×1

mockito ×1

powermock ×1