`
hwy1782
  • 浏览: 150428 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jmock 中unexpected invocation错误

 
阅读更多

远程服务接口

 

public interface RemoteService {

    public BaseResult findMemberById(Query query);

    public String addMethod();
}

返回值封装对象

 

public class BaseResult {
	
	private String name;

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

 服务类

 

public class RealService {

    private RemoteService remoteService;

    public void doExecute(String memberId) {
    	BaseResult apple = null;
    	Query query = new Query(memberId);
    	apple = getRemoteService().findMemberById(query);
        System.out.println(apple);
    }

	public RemoteService getRemoteService() {
		return remoteService;
	}

	public void setRemoteService(RemoteService remoteService) {
		this.remoteService = remoteService;
	}

}

 jmock模拟测试

 

public class RealServiceTest extends TestCase {

    private RealService service = new RealService();

    @Test
    public void testDoExecute() {

        Mockery context = new Mockery();
        final RemoteService remoteService = context.mock(RemoteService.class);
        final BaseResult result = new BaseResult();
        final Query query = new Query("test");
        result.setName("apple");
        
        context.checking(new Expectations() {

            {
                oneOf(remoteService).findMemberById(query);
                will(returnValue(result));
            }
        });

        service.setRemoteService(remoteService);
        service.doExecute("test120");
        context.assertIsSatisfied();
    }

}

 运行报错:

 

 写道
unexpected invocation: morganService.findMemberById(<com.jmockTest.Query@14a8cd1>)
expectations:
expected once, never invoked: morganService.findMemberById(<com.jmockTest.Query@e0b6f5>)
parameter 0 did not match: <com.jmockTest.Query@e0b6f5>, because was <com.jmockTest.Query@14a8cd1>; returns <name apple price 0.0 info null>
what happened before this: nothing!
…………
…………

 观察错误:

com.jmockTest.Query@14a8cd1

com.jmockTest.Query@e0b6f5

有两个Query对象的引用,说明一个问题:Query 这个类被new了两次,RealServiceTest 这个类中new了一次,而RealService 中也new了一次。

jmock使用的代理机制,运行测试类时,参数值不一致,出错。

 

解决方案:http://www.jmock.org/cheat-sheet.html

 

 

有一句话:
To define looser constraints, specify all arguments as matchers within with clauses:

allowing (calculator).add(with(any(int.class)), with(any(int.class)));
 

 

使用: oneOf(remoteService).findMemberById(with(any(Query.class))); 这句解决问题。

 

 

分享到:
评论

相关推荐

    JMOCK 帮助 网页 文档

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

    jmock学习文档

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

    jmock2.5.1.zip

    jmock2.5.1.zip

    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对java代码测试,如果实在不清楚,也可咨询 445054051

    jmock-2.5.1-javadoc

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

    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-2.6.0-jars

    jmock jar和源码

    Jmock学习手册

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

    Jmock Mock 没有接口的类

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

    jmock-1.0.1.jar

    jmock-1.0.1.jar jmock-1.0.1.jar

    jmock2.5.1和easymock3.0

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

    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

    NULL 博文链接:https://tristan-s.iteye.com/blog/1750265

    jmock-1.2.0-jars.rar

    jmock-1.2.0-jars.rar

    jmock2.5基本教程—终结版.doc

    jmock2.5基本教程目录第0章 概述第1章 jmock初体验第2章 期望第3章 返回值第4章 参数匹配第5章 指定方法调用次数第6章 指定执行序列第7章 状态机第0章 概述

    jmock-2.5.1-jars.zip

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

    JMock 2.6.1所有源代码

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

    jmock-2.6.0帮助文档chm格式

    jmock的chm格式文档。版本2.6.0

Global site tag (gtag.js) - Google Analytics