JUnit4参数化测试实例
注意:
在Eclipse中因为版本问题,可能无法使用@parameters(name = "xxx"),详见解决办法(文章的最后部分: IDE Bug - Eclipse):
https://github.com/junit-team/junit/wiki/Parameterized-tests


1. MathUtils – 参数化测试
查看一个简单的 add 方法。
MathUtils.java
package com.yiibai.match.utils;
public class MathUtils {
public static int add(int a, int b) {
return a + b;
}
}
这里有一个为上面的JUnit测试类,阅读不言自明的注释。
MathUtilsTest.java
package com.yiibai.match.utils; import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters; @RunWith(value = Parameterized.class)
public class MathUtilsTest { private int numberA;
private int numberB;
private int expected; //parameters pass via this constructor
public MathUtilsTest(int numberA, int numberB, int expected) {
this.numberA = numberA;
this.numberB = numberB;
this.expected = expected;
} //Declares parameters here
@Parameters(name = "{index}: add({0}+{1})={2}")
public static Iterable<Object[]> data1() {
return Arrays.asList(new Object[][] {
{ 1, 1, 2 },
{ 2, 2, 4 },
{ 8, 2, 10 },
{ 4, 5, 9 }
});
} @Test
public void test_add() {
assertEquals(expected,MathUtils.add(numberA, numberB));
} }
什么是 {0}, {1} 和 {2}?
如果参数是 “{ 3, 4, 7 }”, 那么 {0} = 3, {1} = 4, {2} = 7. 请参考以下的输出:


2. DomainUtils – 参数化测试
查看域名验证程序。
DomainUtils.java
package com.yiibai.regex.utils;
import java.util.regex.Pattern;
public class DomainUtils {
private static Pattern pDomainName;
private static final String DOMAIN_NAME_PATTERN = "^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$";
static {
pDomainName = Pattern.compile(DOMAIN_NAME_PATTERN);
}
//is this a valid domain name?
public static boolean isValidDomainName(String domainName) {
return pDomainName.matcher(domainName).find();
}
}
这里有一个 JUnit 测试上面的类。
DomainUtilsTest.java
package com.yiibai.regex.utils; import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters; @RunWith(value = Parameterized.class)
public class DomainUtilsTest { private String domain;
private boolean expected; public DomainUtilsTest(String domain, boolean expected) {
this.domain = domain;
this.expected = expected;
} @Parameters(name= "{index}: isValid({0})={1}")
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] {
{ "google.com", true },
{ "yiibai.com", true },
{ "-yiibai.com", false },
{ "yiibai-.com", false },
{ "3423kjk", false },
{ "mk#$kdo.com", false }
}
);
} @Test
public void test_validDomains() {
assertEquals(expected,DomainUtils.isValidDomainName(domain));
} }
输出结果:


完成
JUnit4参数化测试实例的更多相关文章
- JMeter学习-026-JMeter 分布式(远程)参数化测试实例
以前文所述对文章详情的HTTP请求进行性能测试为例.日常实际场景中,不可能所有的人都在同时访问一篇文章,而是多人访问不同的文章,因而需要对文章编号进行参数化,以更好的模拟日常的性能测试场景.同时,因文 ...
- Junit4参数化测试实现程序与用例数据分离
http://touchfu.iteye.com/blog/732930 现状:你是不是还在为自己的TestCase代码杂乱无章而苦恼,咎其根本还在于针对不同的用例,输入参数和mock信息的组装全部作 ...
- 用JUnit4进行参数化测试
参数化测试是一个JUnit 3不具备的功能. 基本使用方法 @RunWith 当类被@RunWith注解修饰,或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解所指明的运行器(runner) ...
- 同时使用Junit4的@Parameterized参数化测试和Spring容器
转载:http://www.jianshu.com/p/d191fe54915f 整合Spring容器 @SpringApplicationConfiguration(classes = Applic ...
- Junit4进行参数化测试
@RunWith, 当类被@RunWith注解修饰,或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解所指明的运行器(runner)来运行测试,而不是JUnit默认的运行器. 要进行参数化测 ...
- Google C++单元测试框架GoogleTest---值参数化测试
值参数化测试允许您使用不同的参数测试代码,而无需编写同一测试的多个副本. 假设您为代码编写测试,然后意识到您的代码受到布尔参数的影响. TEST(MyCodeTest, TestFoo) { // A ...
- junit 单元测试 - 参数化测试
junit4.x版本需要引入如下jar包: hamcrest-core-1.3.jar junit-4.12-beta-3.jar 新建一个计算器类,如下: package com.pt; publi ...
- Jmeter 参数化请求实例
Jmeter 参数化请求实例 在jmeter中的请求可以参数化,其中参数化的方式有4种: 1.CSV Data Set Config 2.数据库 3.用户自定义变量 4.用jmeter中的函数获取参数 ...
- junit参数化测试
在前面的junit4初体验中我就说过,junit参数化测试是一只小怪兽,只逼编码痛点,现在我们这里来整理一下. 看过我前面的那篇初体验的就会发现一个问题,我们的测试代码大量的重复了.在这里先贴出原来的 ...
随机推荐
- 微信公众号抢现金红包活动的核心代码分析(asp.net C#)
今年春节微信抢红包,我想各位都还记得.最近很多商家也在使用公众号给粉丝发红包,做营销活动.吸粉活动或者是反馈老用户等. 我们作为第3方开发者,就义不容辞的来给这些商家服务了.首先我们得会使用程序来写抢 ...
- tornado源码分析-iostream
tornado源码分析-iostream 1.iostream.py作用 用来异步读写文件,socket通信 2.使用示例 import tornado.ioloop import tornado.i ...
- android 模拟器 sdcard权限修改
http://blog.csdn.net/zj510/article/details/8645777 mksdcard 1024M c:\sdcard.img (路径随意,大小随意) 执行:adb p ...
- Excel2013 破解(编辑工作表受保护)密码
在日常工作中,大家有时会遇到过这样的情况:使用Excel编制的报表.表格.程序等,在单元格中设置了公式.函数等,为了防止其他人修改您的设置或者防止您自己无意中修改,您可能会使用Excel的工作表保护功 ...
- Centos7 ss搭建
1.安装pip Pip 是 Python 的包管理工具,下载ss十分方便,但是centos是没有pip的,我们需要安装一个. yum install python-setuptools & e ...
- jQuery弹性展开收缩菜单插件gooey.js
分享一款基于jQuery弹性展开收缩菜单插件gooey.js.这是一款基于gooey.js插件实现的弹性菜单特效代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <hea ...
- 实践 ArcGIS Web 3D
ArcGIS 产品家族的 Web 3D 功能众多用户期待已久.从 ArcGIS 10.3.1 版本号開始,Esri 放了个大招,千呼万唤始出来的 Web 3D 功能,最终不再犹抱琵琶半遮面了. 那究竟 ...
- 从零写Java Web框架——请求的处理DispatcherServlet
大概思路 继承 HttpServlet,实现 DispatcherServlet,拦截所有请求: DispatchServlet 重写 init()方法,负责初始化框架: 重写 service()方法 ...
- 负数在计算机中的表示 Byte-128
本文转载: http://blog.csdn.net/njuitjf/article/details/4585247 原码:将一个整数,转换成二进制,就是其原码.如单字节的5的原码为:0000 010 ...
- redis详细配置文件
redis 单机版自己指定配置 #修改为守护模式 daemonize yes #设置进程锁文件 pidfile /usr/local/redis/redis.pid #端口 port 6379 #客户 ...