总结下这几天初步学习mock的心得. 文中大部分内容来自官网文档.
创建Mock对象
|
Mockery context = new Mockery();
Turtle turtle = context.mock(Turtle.class);
Turtle turtle2 = context.mock(Turtle.class, "turtle2");
|
创建Mock Expections
|
... create mock objects ...
public void testSomeAction() {
... set up ...
context.checking(new Expectations() {{
... <expections block> ...
}});
... call code being tested ...
}
|
expections 这里指的是jmock在不同情况下的预期值。expections 是jmcok的最重要部分之一。可以模拟用户在不同情况下返回不同的结果。
<expections block>这里是可以设置多个expections 。
Expectations
expections的结构如下:
|
invocation-count (mock-object).method(argument-constraints);
inSequence(sequence-name);
when(state-machine.is(state-name));
will(action);
then(state-machine.is(new-state-name));
|
上面是一个通用的结构。所有expecions都采用相同或更简洁的结构。
invocation-count |
mock调用频率。oneOf表示调用一次后这个expections即失效。 |
mock-object |
mock对象。即上面Mockery创建的对象。 |
method |
用mock代替实现接口的一个方法。所以mock必须使用接口编程。 |
argument-constraints |
mock参数条件。即mock指定方法的参数。 |
when … will…then … |
类似于if .. else… 这样的语句。简单的条件表达式 |
action |
mock符合条件后,执行操作。一般是返回结果。或者抛出异常 |
state-machine |
条件表达式。 |
下面详细讲解下expectations各个部分。
Invocation Count
oneOf |
只执行一次 |
exactly(n).of |
执行指定n次 |
atLeast(n).of |
至少执行n次 |
atMost(n).of |
最多执行n次 |
between(min,max).of |
可以执行min-max次 |
allowing |
允许执行,不受限制 |
ignoring |
功能同allowing类似。这里主要字面上区分allowing |
never |
不允许执行 |
Actions
will(returnValue(v)) |
返回一个值。Object类型任意。集合类型不建议这里返回。虽然也可以 |
will(returnIterator(c)) |
返回一个集合类型的值。 |
will(returnIterator(v1, v2, …,vn)) |
返回一个集合类型的值。可以用多个,来分隔。 |
will(throwException(e)) |
抛出一个异常。 |
will(doAll(a1, a2, …, an)) |
嵌套执行多个actoin。不常用。 |
Sequences
设定mock方法调用的顺序。简单的看下面代码片段。
定义了先save后countUser。调用的时候也必须找这个顺序。否则用例失败。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public void testCountUserSequences() {
final Sequence testSequence = mockery.sequence("testSequence");
final User _user = genUser();
mockery.checking(new Expectations() {
{
oneOf(userDao).save(_user);
inSequence(testSequence);
will(returnValue(_user));
oneOf(userDao).countUser();
inSequence(testSequence);
will(returnValue(1));
}
});
assertEquals(userService.save(_user).getUsername(), "fengsage");
assertEquals(userService.countUser(), 1);
}
|
转自:http://fredzhu.com/2011/12/jmock2-notes-2/
分享到:
相关推荐
Jmock学习手册,让你更快学习Jmock。。
JMock学习文档分享
jmock学习文档,模拟对象技术,jMock 可以和既有的其他测试框架,如JUnit,很好地整合在一起,共同使用。
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.5.1.zip
Jmock2.6 jar包
jmock可以模拟对象,常用于单元测试,与junit配合使用 jmock-2.5.1-javadoc
jmock 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 帮助 网页 文档 在网上找的一些bolg里的文档 JMOCK 帮助 网页 文档 在网上找的一些bolg里的文档
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-1.0.1.jar jmock-1.0.1.jar
Jmock Mock 没有接口的类 很方便使用
JMock2.5.1和EasyMock3.0以及一些JUnit单元测试所需的jar,让你使用JMock和EasyMock时不用到处找相关的jar。
jmock2.5基本教程目录第0章 概述第1章 jmock初体验第2章 期望第3章 返回值第4章 参数匹配第5章 指定方法调用次数第6章 指定执行序列第7章 状态机第0章 概述
NULL 博文链接:https://tristan-s.iteye.com/blog/1750265
jmock-1.2.0-jars.rar
Jmock做单元测试学习文档,包含JMock的运行原理,和测试流程。
jMock利用mock objects思想来对Java code进行测试。jMock具有以下特点:容易扩展,让你快速简单地定义mock objects,因此不必打破程序间的关联,让你定义灵活的超越对象之间交互作用而带来测试局限,减少你测试地脆弱...
这个是几篇关于如何使用JMOCK对java代码测试,如果实在不清楚,也可咨询 445054051