`
liguiking
  • 浏览: 30751 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类

Easy Mock之对象参数,必须改写equals

阅读更多
今日使用大名鼎鼎的Easy Mock,发现一个奇怪的现象,Mock的对象的API中如果以String,int等原始类型作为参数,没有什么异常。如果API中使用他对象作为参数,出现一个奇怪的现象:

Unexpected method call listPerson(Pager@5b8e8c[pagenumber=1,pagesize=20,searchFields=]):
    listPerson(Pager@17757ad[pagenumber=1,pagesize=20,searchFields=]): expected: 1, actual: 0
	at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:45)
	at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:73)
	at $Proxy44.listPerson(Unknown Source)


expected: 1, actual: 0,

好像是找到相同的方法,可是异常信息明明是给出来了,是有listPerson(Pager)这个API的。
检查代码无数十遍,又翻看了以前的测试用例(以前的测试被Mock接口的API均是原始类型参数),无解,断点跟踪到Easy Mock内部,三绕两绕,糊涂了。再去查看参考文档,反复看了这么一段:

If classUnderTest.addDocument("New Document", new byte[0]) calls the expected method with a wrong argument, the Mock Object will complain with an AssertionError: 
java.lang.AssertionError: 
  Unexpected method call documentAdded("Wrong title"):
    documentAdded("New Document"): expected: 1, actual: 0
    at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:29)
    at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:44)
    at $Proxy0.documentAdded(Unknown Source)
    at org.easymock.samples.ClassUnderTest.notifyListenersDocumentAdded(ClassUnderTest.java:61)
    at org.easymock.samples.ClassUnderTest.addDocument(ClassUnderTest.java:28)
    at org.easymock.samples.ExampleTest.testAddDocument(ExampleTest.java:30)

上面如果使用错误的参数,会出现这种情况,示例里的参数一个是"Wrong title",一个是"New Document",似乎问题在这里了,于是拿出以前的测试,将Mock时设置的参数与调用时参数改成不同,果然出现一样的情况expected: 1, actual: 0。看来这个参数必须相等的,再将测试代码的与应用代码均的listPerson都使用new Pager(),问题如故,这下晕菜了。再返回去看异常:

listPerson(Pager@5b8e8c[pagenumber=1,pagesize=20,searchFields=]):
    listPerson(Pager@17757ad[pagenumber=1,pagesize=20,searchFields=]):



恍然大悟:Pager@5b8e8c -- Pager@17757ad,equals啊,equals,偷了一下懒,浪费半天生命。改写了equals及hashCode,世界终于清静了
分享到:
评论
1 楼 lizhuang 2017-07-18  
遇到了同样情况,浪费了半个小时时间,看你的帖解决了,给你点个赞!

相关推荐

    如何使用Easy Mock视频教程

    Easy Mock是一款强大的在线接口模拟工具,它可以帮助开发者在开发过程中快速创建模拟的API接口,无需后端配合,就能进行前端的开发和测试工作。这款工具特别适合于敏捷开发和持续集成的项目,使得前端开发可以独立...

    easy mock.pdf

    方便快速上手使用easymock

    easy mock 3.1 API CHM

    Easy mock 3.1 API文档,CHM格式 如果打开无法显示,右键文件属性解除锁定后再尝试

    mock对象介绍

    ### Mock对象介绍 #### 一、引言 在软件开发过程中,单元测试是确保代码质量的重要环节。然而,在测试特定代码段时,如果该代码依赖于外部系统(如数据库访问、网络请求等),就会带来一系列挑战。为了克服这些...

    easy-mock-dev.zip

    压缩包中包括easy-mock-dev.zip、node-v12.10.0-linux-x64.tar.xz和centos7安装说明。 Centos部署node.js、MongoDB安装、Redis安装、部署easy-mock、导入SwaggerAPI文档

    easy mock 本地部署所有资源

    完整的easy mock 本地部署 window10,出坑资源啊,亲测成功,搭配安装教程https://blog.csdn.net/Embrace924/article/details/85699301

    0积分:Mock对象教程

    ### 使用Mock对象在Java单元测试中的重要性及实践 #### 引言 在软件开发过程中,单元测试作为确保代码质量的重要环节,其有效性往往受到多种因素的影响,尤其是当待测方法依赖于外部资源如网络、数据库或其他复杂...

    easy-mock.rar

    掌握Easy-Mock的使用,不仅能够提升个人开发能力,也能提升整个团队的工作效率,是每个开发者都应该了解和掌握的工具之一。在使用过程中,结合MockJS的语法和Easy-Mock提供的各种功能,你可以创建出几乎无限可能的...

    基于python的mock测试数据练习

    1. `assert_called_once_with()`: 检查mock对象是否被调用一次,并且参数匹配。 ```python mock_obj.some_method.assert_called_once_with(arg1, arg2) ``` 2. `call_count`: 查看mock对象被调用的次数。 ```python ...

    easy-mock.zip

    包含node-v12.10.0-linux-x64.tar.xz , mongodb-linux-x86_64-rhel70-4.2.1.tgz , redis-3.0.0.tar.gz , easy-mock-dev.zip 等包

    easy-mock-cli:为Easy-Mock创建api.js。 https:easy-mock.github.ioeasy-mock-cli

    如果您正在使用Easy Mock伪造接口数据,那一定不要错过Easy Mock CLI。 链接 安装 npm install -g easy-mock-cli 贡献 叉子! 创建功能分支:git checkout -b my-new-feature 提交更改:git commit -am'添加一些...

    dubbo-easy-mock:针对Dubbo接口的Mock解决方案

    这个框架的作用 在自动测试中,针对dubbo接口进行mock的框架 原理 利用dubbo的扩展点自动包装,通过EasyMockClusterWrapper... <artifactId>dubbo-easy-mock <version>1.1.0 <groupId>org.apache.dubbo</grou

    Go-Mockcounterfeiter-一个工具用于在Go中生成自容器类型安全的测试Mock对象

    "Mock counterfeiter" 是一个专为Go语言设计的工具,它的目标是帮助开发者生成自容器且类型安全的测试Mock对象,简化了编写Mock对象的过程,从而提高了测试的效率和准确性。 Mock counterfeiter的工作原理是基于...

    vue后台管理系统,技术栈 vue2.0 +elementUi +vuex + easy-mock + vue-router + es6.zip

    vue后台管理系统,技术栈 vue2.0 +elementUi +vuex + easy-mock + vue-router + es6vue-element-admin技术栈 vue2.0 + elementUI +vuex + easy-mock + vue-router + es6 如果对你有帮助请点右上角star,谢谢概述这两...

    easymock详解教程

    在单元测试中,通常会有一个主要的测试对象(即待测代码),以及一系列与之交互的其他对象(依赖)。这些依赖对象可能包括数据库、远程服务或其他组件。 ##### 主要测试对象 主要测试对象是指需要验证其行为和功能...

    Mock

    3. **验证Mock行为**:确保Mock对象在测试过程中被正确调用,验证其方法的调用次数、参数和返回值。 4. **保持测试独立**:Mock应当使每个测试独立运行,不受其他测试的影响。 5. **避免Mock静态方法**:静态方法...

    easy-mock-cli

    Easy Mock CLI Easy Mock CLI 是一个基于 快速生成 API 调用文件的命令行工具。 如果你正在使用 Easy Mock 伪造接口数据,那一定不要错过 Easy Mock CLI。 Links Installation npm install -g easy-mock-cli License...

    C++ mock框架mockcpp

    然后,可以通过mock对象设置期望的方法调用,包括调用的次数、参数以及返回值。在测试执行过程中,mock对象会记录这些方法调用,测试结束后,可以检查这些记录以验证预期的行为是否符合实际发生的。 例如,如果你...

Global site tag (gtag.js) - Google Analytics