使用Mockito检查多个参数的一致性

Lau*_*ves 11 java mocking mockito

我正在使用Mockito来模拟一个类似于以下方法的类:

setFoo(int offset, float[] floats)
Run Code Online (Sandbox Code Playgroud)

我希望能够验证array(floats)中的值是否与预期值数组中的值相等(在给定的容差范围内).

问题是,我想检查floats从指定位置开始的内容offset.出于测试的目的,我不知道/关心偏移是什么,只要它指向我期望的值.我也不在乎数组的其余部分包含什么.我只关心从提供的偏移量开始的值.

我该怎么做呢?

Jef*_*ica 36

虽然部分模拟不是一个坏主意,但如果使用ArgumentCaptor代替事后获取值,您可能会发现代码更容易理解.它是一个特殊的参数匹配器,可以跟踪它匹配的值.

// initialized with MockitoAnnotations.initMocks();
@Captor ArgumentCaptor<Integer> offsetCaptor;
@Captor ArgumentCaptor<float[]> floatsCaptor;
@Mock Bar bar;

@Test
public void valuesShouldBeCloseEnough() {
  Sut sut = new Sut(bar);
  sut.doSomething();
  verify(bar).setFoo(offsetCaptor.capture(), floatsCaptor.capture());

  // check values with assertValuesAreCloseEnough, declared elsewhere
  assertValuesAreCloseEnough(offsetCaptor.getValue(), floatsCaptor.getValue());
}
Run Code Online (Sandbox Code Playgroud)