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单元测试的更多相关文章

  1. JUnit + Mockito 单元测试

    原 JUnit + Mockito 单元测试(二) 2015年01月05日 17:26:02 sp42a 阅读数:60755 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  2. 一文让你快速上手 Mockito 单元测试框架

    前言 在计算机编程中,单元测试是一种软件测试方法,通过该方法可以测试源代码的各个单元功能是否适合使用.为代码编写单元测试有很多好处,包括可以及早的发现代码错误,促进更改,简化集成,方便代码重构以及许多 ...

  3. JUnit + Mockito 单元测试(二)(good)

    import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import java.util.Lis ...

  4. Android 单元测试(junit、mockito、robolectric)

    1.运用JUnit4 进行单元测试 首先在工程的 src 文件夹内创建 test 和 test/java 文件夹. 打开工程的 build.gradle(Module:app)文件,添加JUnit4依 ...

  5. JUnit + Mockito 单元测试(二)

    摘自: http://blog.csdn.net/zhangxin09/article/details/42422643 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 入门 ...

  6. 使用 Mockito 单元测试 – 教程

    tanyuanji@126.com 版本历史 - - - - 使用 Mockito 进行测试 该教程主要讲解 Mockito 框架在Eclipse IDE 中的使用   目录 tanyuanji@12 ...

  7. Mockito单元测试

    Mockito简介 Mockito是一个单元测试框架,需要Junit的支持.在我们的项目中,都存在相当多的依赖关系,当我们在测试某一个业务相关的接口或则方法时,绝大多数时候是没有办法或则很难去添加所有 ...

  8. Spring整合JUnit框架进行单元测试代码使用详解

    一.Spring提供的JUnit框架扩展:   1. AbstractSpringContextTests:spring中使用spring上下文测试的Junit扩展类,我们一般不会使用这个类来进行单元 ...

  9. java使用Junit工具进行单元测试

    目录 1.类的定义: 2.Junit工具的使用: 3.对该类进行单元测试并查看结果: 4.记录各个阶段的时间 5.将过程记录在个人博客上(github地址) 1.类的定义:类是同一事物的总称,类是封装 ...

随机推荐

  1. java.lang.reflect.UndeclaredThrowableExceptionjiang

    实例包含由调用处理程序抛出的经过检查的未声明异常,可以使用 getUndeclaredThrowable() 方法获取 String msg = null; if (e instanceof Unde ...

  2. 通过NVM安装node

    NVM(Node version manager)顾名思义,就是Node.js的版本管理软件,可以轻松的在Node.js各个版本间切换,项目源码GitHub 1.下载并安装NVM脚本 curl htt ...

  3. springMVC整合freemarker遇到的问题 maven

    java.lang.IllegalAccessError: tried to access method freemarker.ext.servlet.AllHttpScopesHashModel.& ...

  4. java面试题一

    个人的一点参考总结,如有雷同,纯属巧合! 1.hashmap的实现原理以及hashtable的线程安全是怎么实现的?HashMap其实也是一个线性的数组实现的,所以可以理解为其存储数据的容器就是一个线 ...

  5. ARP监测工具Arpwatch

    ARP监测工具Arpwatch   ARP协议是网络的基础协议.基于ARP协议的ARP攻击是局域网最为常见和有效的攻击方式.ARP攻击可以通过发送伪造的ARP包实施欺骗,实现各种中间人攻击.Arpwa ...

  6. hdu1232 畅通工程 并查集的 应用

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  7. HDU 1272(并查集)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  8. CUDA学习笔记1:第一个CUDA实例

    一.cuda简介 CUDA是支持c++/c语言,一般我喜欢用c来写,他的编译是gpu部分由nvcc来进行的   一般的函数定义 void  function(); cuda的函数定义 __global ...

  9. [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 - ...

  10. [BZOJ4012][HNOI2015]开店(动态点分治,树链剖分)

    4012: [HNOI2015]开店 Time Limit: 70 Sec  Memory Limit: 512 MBSubmit: 2168  Solved: 947[Submit][Status] ...