Junit Hamcrest Mockito单元测试
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.test.foo;
public class Foo {
public String concat(String s1, String s2) {
if (s1 == null) return s2;
return s1 + s2;
}
}
package com.test.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.test.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.test.foo.dao;
import com.test.foo.model.User;
public class UserDAO {
public void saveUser(User user) {}
public String test() {
return "Original methods";
}
}
package com.test.foo.service;
import com.test.foo.dao.UserDAO;
import com.test.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.test.foo.service;
import com.test.foo.dao.UserDAO;
import com.test.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单元测试的更多相关文章
- JUnit + Mockito 单元测试
原 JUnit + Mockito 单元测试(二) 2015年01月05日 17:26:02 sp42a 阅读数:60755 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- 一文让你快速上手 Mockito 单元测试框架
前言 在计算机编程中,单元测试是一种软件测试方法,通过该方法可以测试源代码的各个单元功能是否适合使用.为代码编写单元测试有很多好处,包括可以及早的发现代码错误,促进更改,简化集成,方便代码重构以及许多 ...
- JUnit + Mockito 单元测试(二)(good)
import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import java.util.Lis ...
- Android 单元测试(junit、mockito、robolectric)
1.运用JUnit4 进行单元测试 首先在工程的 src 文件夹内创建 test 和 test/java 文件夹. 打开工程的 build.gradle(Module:app)文件,添加JUnit4依 ...
- JUnit + Mockito 单元测试(二)
摘自: http://blog.csdn.net/zhangxin09/article/details/42422643 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 入门 ...
- 使用 Mockito 单元测试 – 教程
tanyuanji@126.com 版本历史 - - - - 使用 Mockito 进行测试 该教程主要讲解 Mockito 框架在Eclipse IDE 中的使用 目录 tanyuanji@12 ...
- Mockito单元测试
Mockito简介 Mockito是一个单元测试框架,需要Junit的支持.在我们的项目中,都存在相当多的依赖关系,当我们在测试某一个业务相关的接口或则方法时,绝大多数时候是没有办法或则很难去添加所有 ...
- Spring整合JUnit框架进行单元测试代码使用详解
一.Spring提供的JUnit框架扩展: 1. AbstractSpringContextTests:spring中使用spring上下文测试的Junit扩展类,我们一般不会使用这个类来进行单元 ...
- java使用Junit工具进行单元测试
目录 1.类的定义: 2.Junit工具的使用: 3.对该类进行单元测试并查看结果: 4.记录各个阶段的时间 5.将过程记录在个人博客上(github地址) 1.类的定义:类是同一事物的总称,类是封装 ...
随机推荐
- java.lang.reflect.UndeclaredThrowableExceptionjiang
实例包含由调用处理程序抛出的经过检查的未声明异常,可以使用 getUndeclaredThrowable() 方法获取 String msg = null; if (e instanceof Unde ...
- 通过NVM安装node
NVM(Node version manager)顾名思义,就是Node.js的版本管理软件,可以轻松的在Node.js各个版本间切换,项目源码GitHub 1.下载并安装NVM脚本 curl htt ...
- springMVC整合freemarker遇到的问题 maven
java.lang.IllegalAccessError: tried to access method freemarker.ext.servlet.AllHttpScopesHashModel.& ...
- java面试题一
个人的一点参考总结,如有雷同,纯属巧合! 1.hashmap的实现原理以及hashtable的线程安全是怎么实现的?HashMap其实也是一个线性的数组实现的,所以可以理解为其存储数据的容器就是一个线 ...
- ARP监测工具Arpwatch
ARP监测工具Arpwatch ARP协议是网络的基础协议.基于ARP协议的ARP攻击是局域网最为常见和有效的攻击方式.ARP攻击可以通过发送伪造的ARP包实施欺骗,实现各种中间人攻击.Arpwa ...
- hdu1232 畅通工程 并查集的 应用
畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1272(并查集)
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- CUDA学习笔记1:第一个CUDA实例
一.cuda简介 CUDA是支持c++/c语言,一般我喜欢用c来写,他的编译是gpu部分由nvcc来进行的 一般的函数定义 void function(); cuda的函数定义 __global ...
- [BOI2004]Sequence
题面描述 给定整数数组$a_1,a_2,a_3...a_n$,求递增数组$b_1,b_2,b_3...b_n$ 使得$|a_1 - b_1| + |a_2 - b_2| + ... + |a_n - ...
- [BZOJ4012][HNOI2015]开店(动态点分治,树链剖分)
4012: [HNOI2015]开店 Time Limit: 70 Sec Memory Limit: 512 MBSubmit: 2168 Solved: 947[Submit][Status] ...