【问题标题】:Using ArgumentCaptor on a static method在静态方法上使用 ArgumentCaptor
【发布时间】:2018-10-03 20:06:17
【问题描述】:

我正在使用 Mockito 和 PowerMock 进行单元测试。我有一个正在测试的方法,看起来像这样:

public void underTest(MyClass obj, int num) {
  String arg = "";
  if (obj.conditionIsTrue(num)) {
    arg = "foo";
  } else {
    arg = "bar";
  }
  StaticClass.staticMethod(arg);
}

我想验证staticMethod() 的参数,但我不知道该怎么做。当我有一个实际的模拟对象要处理时,我知道如何使用ArgumentCaptor

@Mock private MyClass mockObject;
@Captor ArgumentCaptor<MyClass> captor;

@Test
public void Test1() {
  underTest(mockObject, 1);
  verify(mockObject).conditionIsTrue(captor.capture());
  assertEquals(1, captor.getValue());
}

但是我如何对staticMethod 的论点做同样的事情呢?

【问题讨论】:

标签: java unit-testing mockito powermock


【解决方案1】:

这是一个老问题,但对于任何偶然发现它的人(就像我一样):

  1. 从 3.4.0 开始,Mockito 可以模拟静态方法,详情请查看 MockStatic 类。
  2. 由于 times() 导致捕获失败:verify 首先关注计数次数,它无法从潜在的多个调用中捕获。

【讨论】:

    猜你喜欢
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2010-10-30
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多