11. verify验证方法调用

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")是不一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值