欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mockito异常测试实例

程序员文章站 2022-07-13 10:37:22
...

Mockito异常测试实例:

package com.bijian.study;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import org.junit.Assert;
import org.junit.Test;

import org.mockito.Mockito;

public class MockitoDemo {

    @Test
    public void mockitoTest() throws Exception {
        
        Service service = new Service();
        Dao dao = mock(Dao.class);// 相当于 new一个dao的模拟类
        service.setDao(dao);
        when(dao.update("1", "2")).thenReturn(2);
        Assert.assertEquals(2, service.update("1", "2"));

        // 方法的参数可以匹配任意值,Mockito.anyXXX() 和任意类 Mockito.any(clazz)
        when(dao.update(Mockito.anyString(), Mockito.any(String.class))).thenReturn(3);
        // 不能将确定值和模糊值混搭,这样会报错
        // when(dao.update("3", Mockito.any(String.class))).thenReturn(3);
        Assert.assertEquals(3, service.update("3", "4"));

        // 下面模拟抛异常
        when(dao.update("3", "4")).thenThrow(new RuntimeException());
        Assert.assertEquals(-1, service.update("3", "4"));

        // void方法抛异常
        Mockito.doThrow(new RuntimeException("测试")).when(dao).voidTest();
        try {
            service.voidTest();
        } catch (Exception e) {
            Assert.assertEquals("测试", e.getMessage());
        }

        // 不能模拟抛Exception类
        //when(dao.update("3", "4")).thenThrow(new Exception());

        // 同一方法不能多次模拟抛异常
        //when(dao.update("3", "4")).thenThrow(new NullPointerException());
        //Assert.assertEquals(-1, service.update("3", "4"));
    }
}

class Service {
    private Dao dao;

    public void setDao(Dao dao) {
        this.dao = dao;
    }

    public void voidTest() {
        dao.voidTest();
    }

    public int update(String a, String b) {
        int i = 0;
        try {
            i = dao.update(a, b);
        } catch (Exception e) {
            i = -1;
        }
        return i;
    }
}

class Dao {
    public void voidTest() {
    }

    public int update(String a, String b) {
        return 1;
    }
}