Spring服务层的测试JMock
研究了2天,终于明白JMock怎么用了。其实原理很简单,模拟测试。
我们在用spring做开发的时候,通常会分N层结构,比如web layer(struts), service(spring), DAO(ibatis)。开发是分层的,测试当然也分层。JMock的测试就是中间service层的测试。前提是保证DAO层,已经是OK的。(DAO层的测试我是用的spring-test做的,这个别的文章会说),JMock是帮你构造一个DAO的模拟对象,当你调用service代码时,service会调用Mock的对象,然后判断你调用的结果,是不是equal你模拟构造出的。
代码如下:
DTO数据模型:
- package com.dvs.biz.service.test;
- import org.apache.commons.lang.builder.ToStringBuilder;
- public class User {
- public User() {}
- public User(Integer id, String name) {
- this.id = id;
- this.name = name;
- }
- private Integer id;
- private String name;
- public Integer getId() {return id;}
- public void setId(Integer id) {this.id = id;}
- public String getName() {return name;}
- public void setName(String name) {this.name = name;}
- public String toString() {
- return ToStringBuilder.reflectionToString(this);
- }
-
}
DAO 接口:
- package com.dvs.biz.service.test;
-
- public interface UserDAO {
- public User getUser(Integer id) throws Exception;
-
}
DAO实现:
- package com.dvs.biz.service.test;
-
- import java.util.ArrayList;
- import java.util.List;
-
- public class UserDAOImpl implements UserDAO{
-
- public User getUser(Integer id) throws Exception {
- System.out.println("UserDAOImpl");
- // some code for "sql"
- // 这里可以随便写点什么,因为这个DAO层是MOCK做,不会真正调度这些代码
-
- return new User();
- }
-
}
Service 接口:
- package com.dvs.biz.service.test;
-
- public interface UserServ {
- public User getUser(Integer id) throws Exception ;
-
}
Service 的现实:
- package com.dvs.biz.service.test;
-
- public class UserServImpl implements UserServ{
- private UserDAO dao;
-
- public void setDAO(UserDAO dao) {
- this.dao = dao;
- }
-
- public User getUser(Integer id) throws Exception {
- System.out.println("UserBusinessDelegate");
- return dao.getUser(id);
- }
-
}
JMock的测试类:
- package com.dvs.biz.service.test;
-
- import static org.junit.Assert.assertEquals;
-
- import org.jmock.Expectations;
- import org.jmock.Mockery;
- import org.jmock.integration.junit4.JMock;
- import org.jmock.integration.junit4.JUnit4Mockery;
- import org.junit.Test;
- import org.junit.runner.RunWith;
-
- @RunWith(JMock.class)
- public class UserServTest {
- Mockery context = new JUnit4Mockery();
-
- @Test
- public void getUser() throws Exception {
- final UserDAO dao = context.mock(UserDAO.class);
- UserServImpl ser = new UserServImpl();
- ser.setDAO(dao);
-
- final User testuser = new User();
- testuser.setId(2);
- testuser.setName("list2");
-
- context.checking(new Expectations() {
- {
- one(dao).getUser(1);
- will(returnValue(testuser));
- }
- });
-
- assertEquals(testuser,ser.getUser(1));
-
- context.assertIsSatisfied();
- }
-
}
one(dao).getUser(1); //调用的dao的方法,和参数
will(returnValue(testuser)); //期待的返回值的结果
assertEquals(testuser,ser.getUser(1)); // 判断用ser调用的结果,是不是和dao返回的结果一样。
上面就是一个简短的小例子,我在这里的测试环境是jdk1.5.0,spring2.5, Junit4.4 , JMock2
分享到:
相关推荐
jmock可以模拟对象,常用于单元测试,与junit配合使用 jmock-2.5.1-javadoc
jmock2.5.1.zip
我所收集的所有单元测试资料,我所收集的所有单元测试资料,
jMock 2: Java 5 and above. Stable: 2.5.1 Binary JARs (includes the source to let IDEs provide context-sensitive help) Javadocs Unstable: 2.6.0-RC2 Binary JARs (includes the source to let IDEs ...
Jmock2.6 jar包
介绍JMock单元测试的内容,内附简单的例子方便参考
用于项目测试,JMOCK,可以与JUNIT搭配进行测试
jmock jar和源码
JMock2.5.1和EasyMock3.0以及一些JUnit单元测试所需的jar,让你使用JMock和EasyMock时不用到处找相关的jar。
jMock利用mock objects思想来对Java code进行测试。jMock具有以下特点:容易扩展,让你快速简单地定义mock objects,因此不必打破程序间的关联,让你定义灵活的超越对象之间交互作用而带来测试局限,减少你测试地脆弱...
Maven-Central / jmock / jmock-cglib 1.2.0 Maven-Central / org.apache.activemq / activemq-ra 5.2.05.1.0 Maven-Central / org.apache.maven.shared / maven-dependency-tree 1.21.1 Maven-Central / org.apache...
JMOCK 帮助 网页 文档 在网上找的一些bolg里的文档 JMOCK 帮助 网页 文档 在网上找的一些bolg里的文档
Jmock学习手册,让你更快学习Jmock。。
不管是测试驱动开发或者是其它的开发模式,都会需要对代码进行单元测试,对于关联依赖关系少或者比较简单的类来说,直接使用JUnit就可以轻松的完成测试工作,但是对于关联到...在这里使用JMock来模拟那些不需要测试的类
这个是几篇关于如何使用JMOCK对java代码测试,如果实在不清楚,也可咨询 445054051
jmock-1.0.1.jar jmock-1.0.1.jar
jmock学习文档,模拟对象技术,jMock 可以和既有的其他测试框架,如JUnit,很好地整合在一起,共同使用。
Jmock Mock 没有接口的类 很方便使用
JMock is a library that supports test-driven development1 of Java2 code with mock objects3. Mock objects help you design and test the interactions between the objects in your programs.
Mock测试主要是用来模拟那些在应用中不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者比较复杂的对象(如JDBC中的ResultSet对象),从而使测试顺利进行...JMock是基于JAVA编写的Mock测试框架。