使用 Mockito 检查多个参数的一致性
我正在使用Mockito来模拟一个类,该类具有如下所示的方法:
setFoo(int offset, float[] floats)
我希望能够验证数组 () 中的值是否等于(在给定容差范围内)等于预期值数组中的值。floats
问题是我想检查从 指定的位置开始的内容。出于测试的目的,我不知道/关心偏移量是多少,只要它指向我期望的值。我也不在乎数组的其余部分包含什么。我只关心从提供的偏移量开始的值。floatsoffset
我该怎么做?
我正在使用Mockito来模拟一个类,该类具有如下所示的方法:
setFoo(int offset, float[] floats)
我希望能够验证数组 () 中的值是否等于(在给定容差范围内)等于预期值数组中的值。floats
问题是我想检查从 指定的位置开始的内容。出于测试的目的,我不知道/关心偏移量是多少,只要它指向我期望的值。我也不在乎数组的其余部分包含什么。我只关心从提供的偏移量开始的值。floatsoffset
我该怎么做?
虽然部分模拟不是一个坏主意,但如果您使用 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());
}
你想要一个部分模拟。假设具有的类名为 Bar:setFoo()
private static abstract class AssertingBar implements Bar {
@Override
void setFoo(int offset, float[] floats) {
this.offset = offset;
this.floats = floats
}
public void verify(float[] expectedFloats, float delta) {
// do your verification here
}
}
@Test
public void valuesShouldBeCloseEnough() {
AssertingBar bar = Mockito.mock(AssertingBar.class, Mockito.CALLS_REAL_METHODS);
Sut sut = new Sut(bar);
sut.doSomething();
bar.verify(...);
}
如果 是类,而不是接口,则可以使用BardoCallRealMethod()