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 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();
}
}
}