package lesson7;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.ArrayList;
import java.util.List;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class ArgumentsMatcherTest {
@Test
public void basicTest() {
List<String> list = mock(ArrayList.class);
// when(list.get(0)).thenReturn("0");
/** eq */
when(list.get(eq(0))).thenReturn("0");
Assert.assertEquals("0", list.get(0));
Assert.assertEquals(null, list.get(1));
}
@Test
public void complexTest() {
Foo foo = mock(Foo.class);
/** isA */
when(foo.func(Mockito.isA(Child1.class))).thenReturn(100);
int result = foo.func(new Child1());
Assert.assertEquals(100, result);
int result2 = foo.func(new Child2());
Assert.assertEquals(0, result2);
/** 清除foo的mock对象的所有stubbing*/
reset(foo);
/** any */
when(foo.func(Mockito.any(Child1.class))).thenReturn(100);
int result11 = foo.func(new Child2());
Assert.assertEquals(100, result11);
}
static class Foo {
int func(Parent p) {
return p.work();
}
}
interface Parent {
int work();
}
class Child1 implements Parent {
@Override
public int work() {
throw new RuntimeException();
}
}
class Child2 implements Parent {
@Override
public int work() {
throw new RuntimeException();
}
}
}
7. 参数匹配:eq、isA、any
Mockito匹配器实践
最新推荐文章于 2022-10-15 16:55:38 发布
本文通过两个测试案例介绍如何使用Mockito中的参数匹配器eq、isA与any来进行精确和泛型的模拟对象行为设置。eq用于精确匹配指定值;isA用于匹配特定类型及其子类型的实例;any则用于忽略参数的具体值。

482

被折叠的 条评论
为什么被折叠?



