您的位置:首页 > 其它

使用junit+mockito进行mock测试实例

2015-12-09 23:09 567 查看
刚开始做网站的时候,测试都是这样的(比如测试修改用户信息的表单逻辑):设置断点,启动运行程序,登陆,点击点击点击然后进入到测试的页面,输入测试数据,进入断点…….。一个大的程序启动又慢,还要登陆,还要输入那么多表单信息才进入到测试的那段代码,我的内心几乎是崩溃的。那时就想,要是测试web程序能像测试普通程序那样,直接测试要测试的那段代码该多好。后来发现,mock测试可以做到。

mock测试实例

新建一个maven项目,加入junit和mockito的依赖。

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.8.4</version>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
</dependency>


新建一个servlet类作为controller:

public class StudentController extends HttpServlet{

@Override
public void doGet(HttpServletRequest request,HttpServletResponse response){
String name = request.getParameter("name");
System.out.println(name);
}

@Override
public void doPost(HttpServletRequest request,HttpServletResponse response){

}

}


接下来我们就要测试这个Servlet的
doGet
doPost
方法。新建一个Junit测试类如下:

//这两个import要自己手写引进来
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.junit.Before;
import org.junit.Test;

public class TestStudentController {

private HttpServletRequest request;
private HttpServletResponse response;
private StudentController studentController;

@Before
public void setUp() throws Exception {
request = mock(HttpServletRequest.class);
response = mock(HttpServletResponse.class);
when(request.getParameter("name")).thenReturn("123");
}

@Test
public void testDoGet() {
studentController = new StudentController();
studentController.doGet(request, response);
}

@Test
public void testDoPost() {
}

}


分析一下上面的代码:

首先,要测试的
doGet(request, response)
,我们发现
doGet
需要两个参数,而且这两个参数是容器传进来的,自己无法创建,所以就模拟一个出来。如下:

request = mock(HttpServletRequest.class);
response = mock(HttpServletResponse.class);


对象是模拟出来了,但是对象的行为还没模拟出来。我们发现Servlet的
doGet
方法用到了
request.getParameter("name")
,所以我们就给模拟对象增加这个模拟行为。如下:

when(request.getParameter("name")).thenReturn("123");


每当模拟对象调用
getParameter("name")
方法时,就返回一个值
123
,就好像真的执行了
request.getParameter("name")
一样。

总而言之,mock测试其实就一句话:需要什么不能自己创建的,就mock()出来,然后用when()给它增加需要的模拟行为。

参考

1、Java Mocking入门—使用Mockito

2、源代码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: