Spring服务层的测试JMock
本文转自 :http://blog.csdn.net/m13666368773/article/details/7026369
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测试框架。