package lesson11;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class VerifyTest {
@Mock
private SimpleDao simpleDao;
@Test
public void testRealCallAdd() {
SimpleService simpleService = new SimpleService(simpleDao);
Simple simple = new Simple();
when(simpleDao.exist(simple)).thenReturn(false);
when(simpleDao.add(simple)).thenReturn(true);
when(simpleDao.update(simple)).thenReturn(true);
boolean result = simpleService.merge(simple);
assertThat(true, equalTo(result));
/**
* 利用verify确定究竟调用的是哪个方法
*/
verify(simpleDao, times(1)).add(simple);
verify(simpleDao, times(0)).update(simple);
}
@Test
public void testRealCallUpdate() {
SimpleService simpleService = new SimpleService(simpleDao);
Simple simple = new Simple();
when(simpleDao.exist(simple)).thenReturn(true);
when(simpleDao.add(simple)).thenReturn(true);
when(simpleDao.update(simple)).thenReturn(true);
boolean result = simpleService.merge(simple);
assertThat(true, equalTo(result));
verify(simpleDao, times(0)).add(simple);
verify(simpleDao, times(1)).update(simple);
}
@Test
public void testMerge() {
SimpleService simpleService = new SimpleService(simpleDao);
Simple simple = new Simple();
when(simpleDao.exist(simple)).thenReturn(true, false);
when(simpleDao.add(simple)).thenReturn(true);
when(simpleDao.update(simple)).thenReturn(true);
boolean result = simpleService.merge(simple);
assertThat(true, equalTo(result));
verify(simpleDao, times(0)).add(simple);
verify(simpleDao, times(1)).update(simple);
result = simpleService.merge(simple);
assertThat(true, equalTo(result));
verify(simpleDao, times(1)).add(simple);
verify(simpleDao, times(1)).update(simple);
}
@After
public void destroy() {
reset(simpleDao);
}
}
package lesson11;
public class SimpleService {
public SimpleDao simpleDao;
public SimpleService(SimpleDao simpleDao) {
this.simpleDao = simpleDao;
}
public boolean merge(Simple simple) {
boolean exist = simpleDao.exist(simple);
if (exist) {
return simpleDao.update(simple);
} else {
return simpleDao.add(simple);
}
}
}
SimpleService
package lesson11;
public class SimpleDao {
public boolean exist(Simple simple) {
throw new RuntimeException();
}
public boolean update(Simple simple) {
throw new RuntimeException();
}
public boolean add(Simple simple) {
throw new RuntimeException();
}
}
SimpleDao
package lesson11;
public class Simple {
}
mock的verify方法
Mockito提供了verify()方法来验证这个mock实例的某个方法是否被调用,调用了几次,是否带有参数以及带有何种参数等
示例
@Test
public void test12(){
List mockedList = mock(List.class);
//Mockito提供了verify()方法来验证这个mock实例的某个方法是否被调用,调用了几次,是否带有参数以及带有何种参数等
mockedList.add("aa");
//验证方法执行过一次
verify(mockedList,atLeastOnce()).add("aa");
}
会验证mockedList是否至少执行过一次
其中atLeastOnce()是静态方法。
import static org.mockito.Mockito.*;
除了该方法还有
@Test
public void test12(){
List mockedList = mock(List.class);
//Mockito提供了verify()方法来验证这个mock实例的某个方法是否被调用,调用了几次,是否带有参数以及带有何种参数等
mockedList.add("aa");
//验证方法执行过一次
//verify(mockedList,atLeastOnce()).add("aa");
//验证执行次数,这里为2次
//verify(mockedList,times(2)).add("aa");
//最多调用一次
//verify(mockedList,atMostOnce()).add("bbb");
//对参数也会校验
verify(mockedList,never()).add("aa");//不通过
verify(mockedList,never()).add("aaa");//通过
}
比如这里的times(2)代表验证次数是否执行2次,如果期待2次,但是实际只执行一次,则会报错
不仅对方法,还会对方法参数进行校验,比如上面执行add("aa")一次之后,验证add("aa")与add("aaa")是不一样的。