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. [BZOJ3150][Ctsc2013]猴子 期望dp+高斯消元

    3150: [Ctsc2013]猴子 Time Limit: 20 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 163  Solved: 10 ...

  2. AC日记——[CQOI2009]DANCE跳舞 洛谷 P3153

    [CQOI2009]DANCE跳舞 思路: 二分+最大流: 代码: #include <cstdio> #include <cstring> #include <iost ...

  3. 图片热点的使用,html <area> 的用法

    <area>标记主要用于图像地图,通过该标记可以在图像地图中设定作用区域(又称为热点),这样当用户的鼠标移到指定的作用区域点击时,会自动链接到预先设定好的页面.其基本语法结构如下: < ...

  4. centOS7.0配置防火墙

    之前用的iptables来管理的防火墙,后来发现centOS7.0中已经用firewalld取代iptables了,于是与时俱进,停用了iptables. systemctl stop iptable ...

  5. 【WPF】城市级联(XmlDataProvider)

    首先在绑定的时候进行转换: public class RegionConverter : IValueConverter { public object Convert(object value, T ...

  6. PHP using mcrypt and store the encrypted in MySQL

    This is how I would do it. Create a class to do encryption/decryption: class cipher { private $secur ...

  7. 2017年浙江中医药大学大学生程序设计竞赛(重现赛)D - CC的神奇背包

    题目描述 cc最近收到了好多礼物,对着满地大小不一的礼物,她想要一个包来装,于是dd就掏出了一个会说话的神奇背包给cc装礼物.cc为了一次性装尽可能多的礼物,于是跟这个背包定下了一个规则,对每个礼物, ...

  8. 洛谷P2323 [HNOI2006] 公路修建问题 [二分答案,生成树]

    题目传送门 公路修建问题 题目描述 OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Associa ...

  9. SSM demo :投票系统

    框架: Spring SpringMVC MyBatis 题目: 投票系统 导包: 1, spring 2, MyBatis 3, mybatis-spring 4, fastjson 5, aspe ...

  10. 连接LilyPad之Linux平台的驱动

    连接LilyPad之Linux平台的驱动 常用的Linux发行版都自带了FTDI驱动,因此在绝大多数Linux发行版中不需要用户进行额外的操作. 在LilyPad编程器被正确驱动后,就可以将LilyP ...