`

Spring服务层的测试JMock

 
阅读更多
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. public interface UserDAO {
  3. public User getUser(Integer id) throws Exception;
  4. }

DAO实现:



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

Service 接口:

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

Service 的现实:

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

JMock的测试类:




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

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