浅谈Mock测试

mock测试

就是在测试过程中,对于某些不容易构造或者 不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。

mock对象

这个虚拟的对象就是mock对象。mock对象就是真实对象在调试期间的代替品。

mock对象使用范畴

真实对象具有不可确定的行为,产生不可预测的效果,(如:股票行情,天气预报) 真实对象很难被创建的 真实对象的某些行为很难被触发 真实对象实际上还不存在的(和其他开发小组或者和新的硬件打交道)等等.

使用mock对象测试的关键步骤

使用一个接口来描述这个对象 在产品代码中实现这个接口 在测试代码中实现这个接口 在被测试代码中只是通过接口来引用对象,所以它不知道这个引用的对象是真实对象还是mock对象。

MOCk前期准备

使用mock要先在程序中导入mock包,使用powermock就导入powermock这个包,使用mockito就导入这个包

Mocktio 在程序中可以import org.mockito.Mockito;然后调用它的static方法,或者import static org.mockito.Mockito.*;个人倾向于后者,因为这样可以更方便些

Mock使用的常用简单语句有下面,当然这不是mock全部语句,只是本人常用的语句:

  1. Mock对象的创建

mock(class or interface)

    假设我们创建Iterator接口的mock对象

     Iterator i = mock(Iterator.class)

  1. 对方法设定返回值

 When(mock.someMethod()).thenReturn(value)

     when(i.next()).thenReturn(“hello”)

   也可以迭代返回值设定when(i.next()).thenReturn(“hello”).thenReturn(“world”)

  1. 对方法设定返回异常

When(i.next()).thenthrow(new RuntimeException())

  1. Mock对象行为验证

 verify(mock).someMethod(…)

下面是在一个开发工具中使用mock一个简单实例:

使用背景:此开发工具创建时自动生动5个项目,分别为data项目、impl项目、service项目、test项目、web项目;其中一个test项目,用于测试前面四个项目

简单操作四个项目:在data项目中创建DAO,数据访问向导,即po层

                  在impl项目中创建ROLE,角色层

                  用ROLE调用DATA

                 最后用test项目测试是否ROLE中调用DAO是否成功

下面是一段简单的test项目中调用的过程:

import com.ygsoft.ecp.abc.data.service.IHHDao;
import com.ygsoft.ecp.abc.test.data.HHDaoTest;
import org.junit.Test;
import static org.junit.Assert.fail;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.when;

/**
 * DDRole.
 */ public class DDRoleTest {     @Test     public void testMethod0() throws Throwable {        HHDao test = mock(HHDao.class);        //when(test,"method","aa").thenReturn("m1234");        when(test,"method","kk").thenCallRealMethod();        System.out.println(test.method("kk"));        when(test,"method","kk").thenThrow(new NullPointerException());        test.method("hh"); }

你可能感兴趣的:(Java,java,前端,数据库,mock测试)