`

Spring服务层的测试JMock

 
阅读更多

 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数据模型:

  1. package com.dvs.biz.service.test;
  2. import org.apache.commons.lang.builder.ToStringBuilder;
  3. public class User {
  4.       public User() {}
  5.       public User(Integer id, String name) {
  6.             this.id = id;
  7.             this.name = name;
  8.       }
  9.       private Integer id;
  10.       private String name;
  11.       public Integer getId() {return id;}
  12.       public void setId(Integer id) {this.id = id;}
  13.       public String getName() {return name;}
  14.       public void setName(String name) {this.name = name;}
  15.       public String toString() {
  16.             return ToStringBuilder.reflectionToString(this);
  17.       }
  18. }

DAO 接口:

  1. package com.dvs.biz.service.test;
  2.  
  3. public interface UserDAO {
  4.       public User getUser(Integer id) throws Exception;
  5. }

DAO实现:


 

  1. package com.dvs.biz.service.test;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. public class UserDAOImpl implements UserDAO{
  7.  
  8. public User getUser(Integer id) throws Exception {
  9. System.out.println("UserDAOImpl");
  10. // some code for "sql"
  11. // 这里可以随便写点什么,因为这个DAO层是MOCK做,不会真正调度这些代码
  12.  
  13. return new User();
  14. }
  15. }

Service 接口:

  1. package com.dvs.biz.service.test;
  2.  
  3. public interface UserServ {
  4.       public User getUser(Integer id) throws Exception ;
  5. }

Service 的现实:

  1. package com.dvs.biz.service.test;
  2.  
  3. public class UserServImpl implements UserServ{
  4.       private UserDAO dao;
  5.  
  6.       public void setDAO(UserDAO dao) {
  7.             this.dao = dao;
  8.       }
  9.  
  10.       public User getUser(Integer id) throws Exception {
  11.             System.out.println("UserBusinessDelegate");
  12.             return dao.getUser(id);
  13.       }
  14. }

JMock的测试类:



 

  1. package com.dvs.biz.service.test;
  2.  
  3. import static org.junit.Assert.assertEquals;
  4.  
  5. import org.jmock.Expectations;
  6. import org.jmock.Mockery;
  7. import org.jmock.integration.junit4.JMock;
  8. import org.jmock.integration.junit4.JUnit4Mockery;
  9. import org.junit.Test;
  10. import org.junit.runner.RunWith;
  11.  
  12. @RunWith(JMock.class)
  13. public class UserServTest {
  14.       Mockery context = new JUnit4Mockery();
  15.  
  16.       @Test
  17.       public void getUser() throws Exception {
  18.             final UserDAO dao = context.mock(UserDAO.class);
  19.             UserServImpl ser = new UserServImpl();
  20.             ser.setDAO(dao);
  21.  
  22.             final User testuser = new User();
  23.             testuser.setId(2);
  24.             testuser.setName("list2");
  25.             
  26.             context.checking(new Expectations() {
  27.                   {
  28.                         one(dao).getUser(1);
  29.                         will(returnValue(testuser));
  30.                   }
  31.             });
  32.  
  33.             assertEquals(testuser,ser.getUser(1));
  34.             
  35.             context.assertIsSatisfied();
  36.       }
  37. }

one(dao).getUser(1);   //调用的dao的方法,和参数
will(returnValue(testuser)); //期待的返回值的结果

assertEquals(testuser,ser.getUser(1)); // 判断用ser调用的结果,是不是和dao返回的结果一样。

上面就是一个简短的小例子,我在这里的测试环境是jdk1.5.0,spring2.5, Junit4.4 , JMock2

分享到:
评论

相关推荐

    jmock-2.5.1-javadoc

    jmock可以模拟对象,常用于单元测试,与junit配合使用 jmock-2.5.1-javadoc

    jmock2.5.1.zip

    jmock2.5.1.zip

    软件测试资料集合,jtest,jmock

    我所收集的所有单元测试资料,我所收集的所有单元测试资料,

    JMOCK 2.6.0-RC2

    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包

    Jmock2.6 jar包

    JMock单元测试

    介绍JMock单元测试的内容,内附简单的例子方便参考

    JMOCK-2.6.0

    用于项目测试,JMOCK,可以与JUNIT搭配进行测试

    jmock-2.6.0-jars

    jmock jar和源码

    jmock2.5.1和easymock3.0

    JMock2.5.1和EasyMock3.0以及一些JUnit单元测试所需的jar,让你使用JMock和EasyMock时不用到处找相关的jar。

    jmock-2.5.1-jars.zip

    jMock利用mock objects思想来对Java code进行测试。jMock具有以下特点:容易扩展,让你快速简单地定义mock objects,因此不必打破程序间的关联,让你定义灵活的超越对象之间交互作用而带来测试局限,减少你测试地脆弱...

    jmock-1.2.0.jar

    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 帮助 网页 文档

    JMOCK 帮助 网页 文档 在网上找的一些bolg里的文档 JMOCK 帮助 网页 文档 在网上找的一些bolg里的文档

    Jmock学习手册

    Jmock学习手册,让你更快学习Jmock。。

    jmock-1.0.1-src.zip_单元测试

    不管是测试驱动开发或者是其它的开发模式,都会需要对代码进行单元测试,对于关联依赖关系少或者比较简单的类来说,直接使用JUnit就可以轻松的完成测试工作,但是对于关联到...在这里使用JMock来模拟那些不需要测试的类

    JMOCK使用文档

    这个是几篇关于如何使用JMOCK对java代码测试,如果实在不清楚,也可咨询 445054051

    jmock-1.0.1.jar

    jmock-1.0.1.jar jmock-1.0.1.jar

    jmock学习文档

    jmock学习文档,模拟对象技术,jMock 可以和既有的其他测试框架,如JUnit,很好地整合在一起,共同使用。

    Jmock Mock 没有接口的类

    Jmock Mock 没有接口的类 很方便使用

    jmock2.5.1

    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.

    JMock 2.6.1所有源代码

    Mock测试主要是用来模拟那些在应用中不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者比较复杂的对象(如JDBC中的ResultSet对象),从而使测试顺利进行...JMock是基于JAVA编写的Mock测试框架。

Global site tag (gtag.js) - Google Analytics