Junit Hamcrest Mockito单元测试实例
来源:互联网 发布:华为悦盒怎么连接网络 编辑:程序博客网 时间:2024/04/27 23:47
Junit Hamcrest Mockito单元测试实例
转载自:http://www.cnblogs.com/zemliu/archive/2013/07/12/3186891.html
pom.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>TestPractice</groupId>
<artifactId>TestPractice</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
1. Junit与Hamcrest
package com.qunar.foo;
public class Foo {
public String concat(String s1, String s2) {
if (s1 == null) return s2;
return s1 + s2;
}
}
package com.qunar.foo;
import org.hamcrest.Matcher;
import org.junit.*;
import java.util.ArrayList;
import java.util.List;
import static junit.framework.Assert.assertTrue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.is;
import static org.junit.Assume.assumeThat;
import static org.mockito.Matchers.contains;
import static org.mockito.Mockito.when;
public class FooTest {
private Foo foo;
/**
* @BeforeClass @AfterClass 设置在public 静态方法之上,表示在class加载之前执行。
* 这样设置的方法只会执行一次。而@Before @After则会再每次test之前/之后执行
*/
@Before
public void setUp() {
foo = new Foo();
}
/**
* Ignore标签表示忽略次测试
*/
@Test
public void concatTwoSubstringFirstIsNull() {
String actual = foo.concat(null, "s2");
String expected = "s2";
Assert.assertEquals(expected, actual);
}
// expected表示期望值
@Test(expected = RuntimeException.class)
public void testException() {
throw new RuntimeException();
}
/**
* Hamcrest方法测试
*/
@Test
@Ignore
public void testHamcrest() {
int i = 10;
assumeThat(i, is(10)); // 前置条件,如果不满足,则不执行后置代码
List<String> list = new ArrayList<String>();
list.add("s1");
list.add("s2");
assertTrue(list.contains("s5"));
// hamcrest的assertThat可以直接对list进行判断
assertThat(list, hasItem("s5"));
}
/**
* Mockito方法测试
*/
// public void testMock() {
// Man mockMan = mock(man);
// // 当真的执行到save方法时,会比对实际参数和expectedMan的符合程度,然后返回true 发了塞
// when(mockMan.save(expectedMan)).thenReturn(true);
// }
@After
public void tearDown() {
foo = null;
}
}
2. Mockito
package com.qunar.foo.model;
public class User {
private String username;
private String passwd;
public User(String username, String passwd) {
this.username = username;
this.passwd = passwd;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof User))
return false;
User user = (User) o;
return username.equals(user.getUsername())
&& passwd.equals(user.getPasswd());
}
}
package com.qunar.foo.dao;
import com.qunar.foo.model.User;
public class UserDAO {
public void saveUser(User user) {}
public String test() {
return "Original methods";
}
}
package com.qunar.foo.service;
import com.qunar.foo.dao.UserDAO;
import com.qunar.foo.model.User;
public class UserService {
UserDAO userDao;
public void saveUser(User user) {
userDao.saveUser(user);
}
public UserDAO getUserDao() {
return userDao;
}
public void setUserDao(UserDAO userDao) {
this.userDao = userDao;
}
}
package com.qunar.foo.service;
import com.qunar.foo.dao.UserDAO;
import com.qunar.foo.model.User;
import org.junit.Test;
import org.junit.Before;
import org.junit.After;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import javax.annotation.Resource;
import static org.mockito.Mockito.*;
/**
* UserService Tester.
*
* @author <Authors name>
* @since <pre>Jul 12, 2013</pre>
* @version 1.0
*/
public class UserServiceTest {
// 自动mock注入
@InjectMocks
@Resource(name="userService")
private UserService userService;
// mock对象,实际上mock对象里面的方法都已经置空,我们需要掌握的是他执行方法的时机
// 以及执行方法时的参数
@Mock
private UserDAO userDao;
@Before
public void before() throws Exception {
MockitoAnnotations.initMocks(this);
}
@After
public void after() throws Exception {
}
/**
*
* Method: saveUser(User user)
*
*/
@Test
public void testSaveUser() throws Exception {
User user = new User("username2", "passwd");
User expectUser = new User("username", "passwd");
// 测试void方法使用doThrow,当调用saveUser()而且,user和expectUser相同时,则会抛出异常,以此检查传入的User是否正确
doThrow(new RuntimeException()).when(userDao).saveUser(expectUser);
userDao.saveUser(user);
// 定制方法返回值
when(userDao.test()).thenReturn("customize userDao.test()");
System.out.println(userDao.test());
// 重置方法
Mockito.reset(userDao);
System.out.println(userDao.test());
// 将一个对象变为Spy对象,他的作用是让这个对象在保持原功能的基础上接受监视
User spy = Mockito.spy(user);
System.out.println(spy.getPasswd());
when(spy.getPasswd()).thenReturn("Passwd was stolen");
System.out.println(spy.getPasswd());
}
}
输出
customize userDao.test()
null
passwd
Username was stolen
- Junit Hamcrest Mockito单元测试实例
- Mockito实例-Junit & Mockito
- 单元测试--Junit和Mockito
- JUnit/Mockito实现单元测试
- JUnit+Mockito单元测试
- JUnit + Mockito 单元测试
- Mockito+Junit单元测试
- JUnit + Mockito 单元测试
- 【Java.JUnit】Spring Test, JUnit, Mockito, Hamcrest 集成 Web 测试
- JUnit + Mockito 单元测试(一)
- JUnit + Mockito 单元测试(二)
- JUnit + Mockito 单元测试(三)
- Spring、junit、mockito单元测试总结
- JUnit + Mockito 单元测试(一)
- JUnit + Mockito 单元测试(二)
- SpringBoot与JUnit+Mockito 单元测试
- 使用Junit和hamcrest包进行单元测试
- Spring Test, JUnit, Mockito, Hamcrest 集成 Web 测试
- ajax 报12030 12031错误 或者0错误
- fnmatch
- 告别臃肿~精简安装Visual Studio 2012
- Java中23种经典设计模式详解
- C++对ASCII文件的操作例子
- Junit Hamcrest Mockito单元测试实例
- servlet工作原理 好文一篇,先攒着
- 利用Cookie保存相应信息
- 山东理工大学ACM平台题答案关于C语言 1592 转置矩阵
- 《C++沉思录》-第十章- 一个课堂练习的分析(下)
- iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断)
- OpenMP知识点汇总
- 2013腾讯实习生面试算法题
- 新品预览-竹邑账册