最近想玩玩JMock。
对着官方文档,想开始写个test case,不过让我郁闷的是官方文档上给的实例代码不完全。算了,自己写个跑跑看了。
1.测试接口:
IHelloService:
1 public interface IHelloService {
2
3 /**
4 * @param name
5 * @return hello message
6 */
7 String sayHelloToSomebody(String name);
8
9 }IMPL:
1 public class HelloServiceImpl implements IHelloService {
2
3 /*
4 * (non-Javadoc)
5 *
6 * @see org.hook.jmock.firstcase.HelloService#sayHelloToSomebody(java.lang.String,
7 * java.lang.String)
8 */
9 public String sayHelloToSomebody(String name) {
10 return "HELLO," + name + "!";
11 }
12
13 }Test Case:
1 public class IHelloServiceTest extends TestCase {
2 private Mockery context = new JUnit4Mockery();
3 private IHelloService helloService;
4
5 /**
6 * @throws java.lang.Exception
7 */
8 @Before
9 public void setUp() throws Exception {
10 // set up
11 helloService = context.mock(IHelloService.class);
12 }
13
14 /**
15 * Test method for
16 * {@link org.hook.jmock.firstcase.HelloServiceImpl#sayHelloToSomebody(java.lang.String)}.
17 */
18 @Test
19 public void testSayHelloToSomebody() {
20 final String message = "HELLO,alex!";
21 final String name = "alex";
22 // expectations
23 context.checking(new Expectations() {
24 {
25 one(helloService).sayHelloToSomebody(name);
26 will(returnValue(message));
27 }
28 });
29 // execute
30 String result = helloService.sayHelloToSomebody(name);
31 // verify
32 context.assertIsSatisfied();
33 assertSame(result, message);
34 }
35 }OK,跑下测试,green bar...
2.测试类:
HelloService:
1 public class HelloService {
2
3 /**
4 * @param name
5 * @return hello message
6 */
7 public String sayHelloToSomebody(String name) {
8 return "HELLO," + name + "!";
9 }
10 }Test Case:
1 public class HelloServiceTest extends TestCase {
2 private Mockery context;
3 private HelloService helloService;
4
5 /**
6 * @throws java.lang.Exception
7 */
8 @Before
9 public void setUp() throws Exception {
10 context = new JUnit4Mockery();
11 // 声明针对类进行mock,针对接口则会采用动态代理,不需要声明
12 context.setImposteriser(ClassImposteriser.INSTANCE);
13 helloService = context.mock(HelloService.class);
14 }
15
16 /**
17 * Test method for
18 * {@link org.hook.jmock.firstcase.HelloService#sayHelloToSomebody(java.lang.String)}.
19 */
20 @Test
21 public void testSayHelloToSomebody() {
22 final String message = "HELLO,vivian!";
23 final String name = "vivian";
24 // expectations
25 context.checking(new Expectations() {
26 {
27 one(helloService).sayHelloToSomebody(name);
28 will(returnValue(message));
29 }
30 });
31 // execute
32 String result = helloService.sayHelloToSomebody(name);
33 // verify
34 context.assertIsSatisfied();
35 assertSame(result, message);
36 }
37 }
分享到:
相关推荐
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 ...
jMock与jUnit的集成非常紧密,通常我们会在jUnit测试类中使用jMock来模拟对象。以下是一个简单的示例: ```java import static org.jmock.Expectations.*; import org.junit.Test; import org.jmock.Mockery; ...
2. **JMock的核心概念** - **Expectations(期望)**:在测试中定义模拟对象的行为,指定何时以及如何响应方法调用。 - **Matchers(匹配器)**:用于指定方法参数的预期值,如`anyInt()`表示任何整数。 - **...
通过这个文档,开发者可以学习如何创建和配置模拟对象,设置和验证期待,以及如何在JUnit等测试框架中集成jMock。 首先,创建模拟对象通常需要使用`Mockery`类,这是jMock的核心类。开发者可以通过`context.mock...
<artifactId>jmock-junit4 <version>2.8.4 <scope>test ``` 同时,由于JMock与JUnit紧密集成,还需要包含JUnit的依赖。 ### 基本使用 在JMock中,模拟对象通过`mock(Class<T> clazz)`方法创建,然后可以使用`...
4. **组合使用与JUnit**:JMock可以很好地与JUnit等测试框架集成,方便编写和运行测试。 **EasyMock 3.0** EasyMock是另一个流行的模拟框架,它的设计目标是使单元测试变得更加简单。EasyMock 3.0版本引入了一些...
Jmock是一款开源的Java库,它基于JUnit构建,专门设计用来创建和验证对象交互。Jmock2.6是该库的一个版本,它包含了对Java 5及更高版本的支持,提供了一种声明式的方式来定义和验证对象间的交互行为。通过Jmock,你...
- `jmock-junit4-2.6.0.jar`: 这个版本支持JUnit 4,可以方便地与JUnit测试一起使用。 - `jmock-2.6.0-sources.jar`: 这包含源代码,对于理解`jmock`的工作原理和自定义扩展非常有用。 ### 6. 使用jmock进行单元...
6. **与JUnit和其他测试框架集成**:JMock可以无缝集成到JUnit、TestNG等流行的测试框架中,使得测试代码更加简洁和整洁。 7. **面向切面编程(AOP)**:JMock基于Java代理和动态代理实现,这使得它具备面向切面编程...
"JMOCK-2.6.0"是一个专门用于项目测试的工具,它能够与JUNIT等单元测试框架完美结合,为开发者提供更加全面和深入的测试支持。 JMOCK的核心功能在于模拟对象的行为,这在进行单元测试时尤其重要。它允许开发者创建...
2. **定义行为**:通过`expect`方法来设定模拟对象的预期行为,如`context.checking(new Expectations() { { oneOf(mock).myMethod(with(any(String.class))); } });` 3. **执行测试**:在测试代码中使用模拟对象,...
在 JUnit 中,你可以使用 `jmock-junit3` 或 `jmock-junit4` 包,它们提供了一个 JUnit Rule,使得在测试类中使用 JMock 更加方便。 6. **版本信息** 这个压缩包中的 "jmock-1.2.0-jars" 提供的是 JMock 1.2.0 ...
JMock可以与其他单元测试框架如JUnit、TestNG等无缝集成,提供更加全面的测试支持。它也可以与Mockito、PowerMock等其他模拟库一起使用,以应对更复杂的测试需求。 总结来说,JMock是一个强大且灵活的Java模拟工具...
2. **JMock 文档**: `jmock-2.5.1-javadoc.zip` 文件提供了JMock的API文档,程序员可以通过查看这份文档了解如何使用JMock的各种类、方法和接口。Javadoc是一种标准格式,它将源代码中的注释转换为易于阅读的HTML...
4. **验证行为**:在测试结束时,jMock会自动验证模拟对象的所有调用是否符合预设的期望。 jMock 2.6.0-RC2还引入了对Java 8的支持,包括Lambda表达式和新的日期时间API,使得在模拟这些新特性时更加方便。同时,这...
3. **集成测试框架**:jMock 2.4.0更好地支持了JUnit、TestNG等流行的测试框架,让测试集成更为顺畅。 四、使用jMock进行单元测试 1. **创建模拟对象**:使用jMock的`Mockery`类创建模拟对象,并指定需要模拟的...