EasyMock的设置上嘲笑对象的方法参数的期望

我不知道如何设置这种与EasyMock的行为。 为了说明我创建了一个简单的例子。 基本上,我有一个返回void的方法,并采取一图,我想EasyMock的更改地图,删除我指定的条目。

假设我有如下界面:

public interface Filter{ public void filter(Map<String,String>map); }

和下面的类:

public class MyClass { private Filter filter; public MyClass(Filter filter) { this.filter = filter; } public Map<String,String> process(Map<String,String>map) { filter.filter(map); return map; } }

我无法弄清楚如何设置此行为:

public class MyClassTest { /** * Test method for {@link easy.MyClass#process(java.util.Map)}. */ @Test public void testProcess() { Map<String, String> map = new HashMap<String, String>(); map.put("one","AAA"); map.put("remove","BBB"); map.put("three","CCC"); Map<String, String> expectedRet = new HashMap<String, String>(); expectedRet.put("one","AAA"); expectedRet.put("three","CCC"); IMocksControl mockery = EasyMock.createControl(); mockery.resetToStrict(); mockery.checkOrder(true); Filter mockFilter = mockery.createMock("filter", Filter.class); MyClass m = new MyClass(mockFilter); mockFilter.filter(map); // I would like some behaviour that will remove the entry ("remove","BBB") // how can I define that? mockery.replay(); m.process(map); mockery.verify(); assertEquals(expectedRet,map); } }

--------------解决方案-------------

你应该设定一个期望, m.process(map)将调用filter(map)在嘲笑过滤器:

Filter mockFilter = mockery.createMock("filter", Filter.class);

// set expectation
mockFilter.filter(map);
replay(mockFilter);

MyClass m = new MyClass(mockFilter);
m.process(map);

// verify expectation
verify(mockFilter);

你已经采取了在你的代码摘录上面的路径尝试验证您的嘲笑过滤器。 这不应该是你测试的目的。 你的情况下测试的类MyClass ,不是Filter

更新:您可以添加行为的模拟:

expect(mockFilter.filter(map)).andDelegateTo(new Filter {
@Override
void filter(Map<String, String> map) {
map.remove("remove");
}
});

然而,在特定情况下, Filter界面十分简单,导致andDelegateTo击败使用模拟的目的Filter摆在首位。 与等量的代码,你可以用一个具体的Filter在您的测试实例:

class TestFilter implements Filter {
@Override
void filter(Map<String, String> map) {
map.remove("remove");
}
}

MyClass m = new MyClass(new TestFilter());
m.process(map);
assertNull(map.get("remove"));

分类:java的 时间:2012-01-01 人气:0
分享到:

相关文章

  • 在Groovy单元测试Java代码 - 如何嘲笑java类? 2012-06-03

    我在用Java编写的一个大项目引进Groovy中,开始(因为大多数人做)与Groovy中写单元测试Java类. 所以,我的问题是: 想象一下,我有2个Java类,ClassA和ClassB的,互动是这样的: public class ClassA { public void doSomething(...) { ...//something ClassB.invokeSomeStaticMethod((someParam); ...//something } } ClassB的是服务,从数据库中

  • 你如何单元测试Java EE的代码? 2012-09-12

    我想问您的首选方式来测试Java EE的代码? 我发现只有三个项目,即试图帮助在Java EE环境的代码单元测试: http://jakarta.apache.org/cactus/:最后发布时间:2009-01-18 http://www.junitee.org/:最后一个版本:2004-12-11 http://ejb3unit.sourceforge.net/:最后一个版本:2008-05-17 所以我想, 没有任何框架,帮助写(J)单元测试Java EE的代码? 你使用像JBoss和Gl

  • 如何进行单元测试Java中的同步方法? 2013-05-24

    我很想知道如何进行单元测试Java中的同步方法. 我们可以用嘲讽像jMockit,框架的Mockito? 我在寻找一个答案在类似于一个有趣的帖子的内容:http://www.boards.ie/vbulletin/showthread.php?t=2056674659 不幸的是,不是建议/答案,有unnecesary讨论! 谢谢, 婴儿床 --------------解决方案------------- 我很想知道如何进行单元测试Java中的同步方法. 如果你的意思如何编写单元测试来测试方法(或类

  • 如何编写自动化单元测试Java注释处理器? 2012-09-29

    我尝试用Java注释处理器. 我能写使用"JavaCompiler的"集成测试(其实我使用的是"山核桃"的时刻). 我可以运行编译过程并分析输出. 存在的问题:一个单一的测试运行大约半秒,即使没有在我的注解处理器的任何代码. 这是太长时间的TDD风格的使用它. 嘲笑走的依赖,似乎很难对我来说(我会模拟出整个"javax.lang.model.element中的"包). 有人成功编写单元测试注释处理器(Java 6中)? 如果不是......这将是

  • 跑在蚂蚁常规单元测试Java项目 2012-11-22

    我有一个使用JUnit编写一些单元测试的Java项目. 近来,已经增加了一些新的单元测试都写在Groovy(也使用JUnit),因为它更容易使那些更具表现力,一般更容易阅读. 它也允许我们使用斯波克框架. 该项目是建立和蚂蚁测试. 添加的常规类之前的单元测试是使用下面的ant任务运行: <target name="test" depends="test-compile"> <junit printsummary="yes">

  • 单元测试Java聊天应用程序 2014-12-16

    我已经开发了Java中的一个基本的聊天应用程序. 它由一个服务器与多个客户端的. 服务器持续监控传入消息,并将其广播到所有的客户. 客户端是由一个Swing GUI与文本区域(由服务器和其他客户端发送的消息),一个文本字段(发短信)和一个按钮(SEND). 客户端还持续监控传入的消息来自其它客户端(通过服务器). 这是实现了与线程和事件监听器和应用程序工作正常. 但是,我怎么去单元测试我聊天应用程序? 由于方法包括建立与服务器的连接和发送/接收来自服务器的消息,我不知道,如果这些方法应该进行单元

  • 单元测试Java Swing应用程序 2012-06-11

    我期待单元测试Swing应用程序,并想知道什么是最好的(容易)的方式来实现这一目标几乎全线覆盖. 如果它的事项,我使用Eclipse伽利略的发展. 谢谢. --------------解决方案------------- 我不能完全明白你的问题. 全面的测试策略,很难仔细计划. 但是,如果你写carefylly测试用例与单元测试框架(如JUnit的),你可以使用代码覆盖工具(即的Cobertura)分析软件. Eclipse有一个很好的插件JUnit和的Cobertura可以使用Ant或Maven

  • 单元测试Java方法 2014-07-11

    请问什么可能是一个相当琐碎的问题: 我是单元测试"setPercentage(INT百分比){...}'方法. 这些要求没有说明关于那里是一个"可接受范围"或允许值什么......但我在疑问,比例应永远只能是0和100之间的应用程序知道. 我应该测试如果所设置的值是有道理的(在单元测试的情况下?) 即我应该写单元测试,如果百分比设置> 100 <0失败? --------------解决方案------------- 如果该方法的文档没有明确说,这种价值观是不允许

  • 什么是单元测试Java EE / Web应用程序的良好做法 2014-09-20

    什么是测试的servlet面向Web应用程序的最佳途径. 我们拥有JDBC支持后端. 前端= Struts2的一些servlet的后端=休眠,一些基本的JDBC --------------解决方案------------- 使用模拟考试,EasyMock的是最好的模拟框架之一(或者你可以使用JMock的,如果你喜欢的名字越好). 弹簧模拟具有嘲讽servlet类很好的支持. 你也可以做DbUnit的集成测试(以测试你的sql语句和hqls),但其缓慢的,需要更长的时间来编写和维护. 我想你不应

  • 使用Clojure的单元测试的Java 2012-06-16

    其中一个方法来获得组织接受替代JVM语言是先用它进行单元测试Java代码 - "老板,我只是会写在XXX一些单元测试它永远不会熄灭投入生产. " 是否有任何教程Clojure中这样做呢? 我刚开始使用Scala这样做是为了测试一个Java REST服务器. 写在斯卡拉的测试让我来嵌入期望的XML输出,模拟与文字的数据库调用List对象等等,更何况特点使它很容易为测试抽象出通用的代码. --------------解决方案------------- 基本上你需要的是clojure.tes

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.624 (s). 10 q(s)