- 浏览: 7855609 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
参考:http://www.cnblogs.com/lukehuang/archive/2013/08/27.html
Brief
Junit 4.11里增加了指定测试方法执行顺序的特性
测试类的执行顺序可通过对测试类添加注解 “@FixMethodOrder(value)” 来指定,其中value 为执行顺序
三种执行顺序可供选择:默认(MethodSorters.DEFAULT),按方法名(MethodSorters.NAME_ASCENDING)和JVM(MethodSorters.JVM)
当没有指定任何顺序时,按默认来执行
Sorters
1. MethodSorters.DEFAULT
默认顺序由方法名hashcode值来决定,如果hash值大小一致,则按名字的字典顺序确定
由于hashcode的生成和操作系统相关(以native修饰),所以对于不同操作系统,可能会出现不一样的执行顺序,在某一操作系统上,多次执行的顺序不变
实现代码:
复制代码
/**
* DEFAULT sort order
*/
public static Comparator<Method> DEFAULT = new Comparator<Method>() {
public int compare(Method m1, Method m2) {
int i1 = m1.getName().hashCode();
int i2 = m2.getName().hashCode();
if (i1 != i2) {
return i1 < i2 ? -1 : 1;
}
return NAME_ASCENDING.compare(m1, m2);
}
};
复制代码
2. MethodSorters.NAME_ASCENDING (推荐)
按方法名称的进行排序,由于是按字符的字典顺序,所以以这种方式指定执行顺序会始终保持一致;
不过这种方式需要对测试方法有一定的命名规则,如 测试方法均以testNNN开头(NNN表示测试方法序列号 001-999)
复制代码
/**
* Method name ascending lexicographic sort order, with {@link Method#toString()} as a tiebreaker
*/
public static Comparator<Method> NAME_ASCENDING = new Comparator<Method>() {
public int compare(Method m1, Method m2) {
final int comparison = m1.getName().compareTo(m2.getName());
if (comparison != 0) {
return comparison;
}
return m1.toString().compareTo(m2.toString());
}
};
复制代码
3. MethodSorters.JVM
按JVM返回的方法名的顺序执行,此种方式下测试方法的执行顺序是不可预测的,即每次运行的顺序可能都不一样(JDK7里尤其如此).
Samples
以下是对Win7 - JDK7 - Junit4.11 的执行结果
复制代码
//@FixMethodOrder(MethodSorters.DEFAULT)
//@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@FixMethodOrder(MethodSorters.JVM)
public class TestJunitOrder {
@Test
public void test003Third() {
System.out.println("test003Third");
}
@Test
public void test001First() {
System.out.println("test001First");
}
@Test
public void test002Second() {
System.out.println("test002Second");
}
}
复制代码
1. DEFAULT
结果始终为:
test002Second
test001First
test003Third
2. NAME_ASCENDING
结果始终为:
test001First
test002Second
test003Third
3. JVM
多数情况下 结果为:
test002Second
test001First
test003Third
偶尔出现:
test001First
test003Third
test002Second
Dig more ..
实际上 Junit里是通过反射机制得到某个Junit里的所有测试方法,并生成一个方法的数组,然后依次执行数组里的这些测试方法;
而当用annotation指定了执行顺序,Junit在得到测试方法的数组后,会根据指定的顺序对数组里的方法进行排序;
复制代码
public static Method[] getDeclaredMethods(Class<?> clazz) {
Comparator<Method> comparator = getSorter(clazz.getAnnotation(FixMethodOrder.class));//获取测试类指定的执行顺序
Method[] methods = clazz.getDeclaredMethods();
if (comparator != null) {
Arrays.sort(methods, comparator);//根据指定顺序排序
}
return methods;
}
复制代码
三种执行顺序的定义如下:
复制代码
/**
* Sorts the test methods by the method name, in lexicographic order,
* with {@link Method#toString()} used as a tiebreaker
*/
NAME_ASCENDING(MethodSorter.NAME_ASCENDING),
/**
* Leaves the test methods in the order returned by the JVM.
* Note that the order from the JVM may vary from run to run
*/
JVM(null),
/**
* Sorts the test methods in a deterministic, but not predictable, order
*/
DEFAULT(MethodSorter.DEFAULT);
复制代码
由上可以看出 当设置为MethodSorters.JVM时,其并没有提供一个Comparator的实现,所以执行方法的顺序实际上就是 clazz.getDeclaredMethods();得到的数组里方法的顺序,而由于java里对getDeclaredMethods返回的方法没有指定任何顺序,所以最终导致Junit测试方法的执行顺序也不是确定的
---------------------------------------------------------------------
例子:
输出:
Executing first test
Executing second test
Executing third test
Brief
Junit 4.11里增加了指定测试方法执行顺序的特性
测试类的执行顺序可通过对测试类添加注解 “@FixMethodOrder(value)” 来指定,其中value 为执行顺序
三种执行顺序可供选择:默认(MethodSorters.DEFAULT),按方法名(MethodSorters.NAME_ASCENDING)和JVM(MethodSorters.JVM)
当没有指定任何顺序时,按默认来执行
Sorters
1. MethodSorters.DEFAULT
默认顺序由方法名hashcode值来决定,如果hash值大小一致,则按名字的字典顺序确定
由于hashcode的生成和操作系统相关(以native修饰),所以对于不同操作系统,可能会出现不一样的执行顺序,在某一操作系统上,多次执行的顺序不变
实现代码:
复制代码
/**
* DEFAULT sort order
*/
public static Comparator<Method> DEFAULT = new Comparator<Method>() {
public int compare(Method m1, Method m2) {
int i1 = m1.getName().hashCode();
int i2 = m2.getName().hashCode();
if (i1 != i2) {
return i1 < i2 ? -1 : 1;
}
return NAME_ASCENDING.compare(m1, m2);
}
};
复制代码
2. MethodSorters.NAME_ASCENDING (推荐)
按方法名称的进行排序,由于是按字符的字典顺序,所以以这种方式指定执行顺序会始终保持一致;
不过这种方式需要对测试方法有一定的命名规则,如 测试方法均以testNNN开头(NNN表示测试方法序列号 001-999)
复制代码
/**
* Method name ascending lexicographic sort order, with {@link Method#toString()} as a tiebreaker
*/
public static Comparator<Method> NAME_ASCENDING = new Comparator<Method>() {
public int compare(Method m1, Method m2) {
final int comparison = m1.getName().compareTo(m2.getName());
if (comparison != 0) {
return comparison;
}
return m1.toString().compareTo(m2.toString());
}
};
复制代码
3. MethodSorters.JVM
按JVM返回的方法名的顺序执行,此种方式下测试方法的执行顺序是不可预测的,即每次运行的顺序可能都不一样(JDK7里尤其如此).
Samples
以下是对Win7 - JDK7 - Junit4.11 的执行结果
复制代码
//@FixMethodOrder(MethodSorters.DEFAULT)
//@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@FixMethodOrder(MethodSorters.JVM)
public class TestJunitOrder {
@Test
public void test003Third() {
System.out.println("test003Third");
}
@Test
public void test001First() {
System.out.println("test001First");
}
@Test
public void test002Second() {
System.out.println("test002Second");
}
}
复制代码
1. DEFAULT
结果始终为:
test002Second
test001First
test003Third
2. NAME_ASCENDING
结果始终为:
test001First
test002Second
test003Third
3. JVM
多数情况下 结果为:
test002Second
test001First
test003Third
偶尔出现:
test001First
test003Third
test002Second
Dig more ..
实际上 Junit里是通过反射机制得到某个Junit里的所有测试方法,并生成一个方法的数组,然后依次执行数组里的这些测试方法;
而当用annotation指定了执行顺序,Junit在得到测试方法的数组后,会根据指定的顺序对数组里的方法进行排序;
复制代码
public static Method[] getDeclaredMethods(Class<?> clazz) {
Comparator<Method> comparator = getSorter(clazz.getAnnotation(FixMethodOrder.class));//获取测试类指定的执行顺序
Method[] methods = clazz.getDeclaredMethods();
if (comparator != null) {
Arrays.sort(methods, comparator);//根据指定顺序排序
}
return methods;
}
复制代码
三种执行顺序的定义如下:
复制代码
/**
* Sorts the test methods by the method name, in lexicographic order,
* with {@link Method#toString()} used as a tiebreaker
*/
NAME_ASCENDING(MethodSorter.NAME_ASCENDING),
/**
* Leaves the test methods in the order returned by the JVM.
* Note that the order from the JVM may vary from run to run
*/
JVM(null),
/**
* Sorts the test methods in a deterministic, but not predictable, order
*/
DEFAULT(MethodSorter.DEFAULT);
复制代码
由上可以看出 当设置为MethodSorters.JVM时,其并没有提供一个Comparator的实现,所以执行方法的顺序实际上就是 clazz.getDeclaredMethods();得到的数组里方法的顺序,而由于java里对getDeclaredMethods返回的方法没有指定任何顺序,所以最终导致Junit测试方法的执行顺序也不是确定的
---------------------------------------------------------------------
例子:
import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runners.MethodSorters; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class OrderedTestCasesExecution { @Test public void test001First() { System.out.println("Executing first test"); } @Test public void test002Second() { System.out.println("Executing second test"); } @Test public void test003Third() { System.out.println("Executing third test"); } }
输出:
Executing first test
Executing second test
Executing third test
发表评论
-
jmeter 测试if 表达器
2018-05-19 21:19 738https://www.douban.com/note/569 ... -
Web网站压力及性能测试
2017-10-09 19:59 651https://segmentfault.com/a/1190 ... -
收藏两个不错的开源国内测试框架
2017-01-09 17:36 2452参考https://my.oschina.net/gi ... -
来自美团的测试模版
2016-05-01 08:44 1102来自美团的测试模版,从各个方面给了不错的范例, 适合中小团队快 ... -
junit 4.11配合Hamcrest
2015-02-12 09:49 1246Hamcrest下载地址为https://code.googl ... -
Selenium中执行Javascript
2015-01-12 11:20 915Selenium中执行Javascript方法如下 ... -
selenium 2中查找所有指定类型的元素
2014-06-02 11:09 7762在selenium 2中,经常要统计或者查找指定类型的元素 ... -
收藏一个不错的selenium教程系列
2014-06-01 11:19 1749http://www.cnblogs.com/sdet/tag ... -
selenium 2中的pageobject学习
2014-05-24 12:28 6911先来看下,用普通的方法如何进行webdrviver的测试 ... -
testng中动态添加注解
2014-05-24 10:14 4566最近看了下testng,的确发觉testng是强大的工具, ... -
在Selenium WebDriver中执行javascript
2014-05-22 20:55 4163在Selenium WebDriver中执行javascr ... -
测试用例之优先级排序
2014-05-13 23:07 1967测试用例按照风险管理的方法,设置三个属性:bug发生概率的 ... -
junit4之Assume.assumeTrue
2014-03-16 12:05 3416在junit测试的时候,如果有的时候必须规定具备某个条件 ... -
junit之记录执行的listener
2014-03-16 11:38 4144在junit 4中,有的时候可以在所有测试开始前,后,每个 ... -
junit 4中的测试套件
2014-03-09 08:28 1743在JUnit4中,如果想要同时运行多个测试类,需要使用两个注 ... -
junit测试之并行测试
2014-03-06 23:20 2917在junit中,还可以同时执行多个单元测试,例子如下: ... -
junit复习1 @before class @after class
2014-02-21 11:11 1025先看代码 public class Junit ...
相关推荐
JUnit是Java编程语言的单元测试框架,用于编写和可重复运行的自动化测试。JUnit4通过注解的方式来识别测试方法。目前支持的主要注解有(下列注解标示了单元测试的不同运行阶段执行的代码): @BeforeClass 全局只会...
android不用另建工程进行单元测试及改变测试方法执行顺序示例代码
创建了一个JUnit测试来测试有效的DAG图排序算法。 可以使用以下命令运行: java -cp .:junit.jar:hamcrest-core.jar org.junit.runner.JUnitCore DAGSortTest 这不会测试特定的输出,而是测试符合拓扑顺序的一般...
JUnitBench 已经在使用 4.x 进行测试? 添加性能测试从未如此简单。 JUnitBench 是一组 JUnit 4.x 扩展,用于基准测试...JUnit 4.x 可插拔架构,具有顺序和多线程支持。 绩效指标目标格式: 逗号分隔值 (CSV) 文件格
@RunWith 指定测试类使用的某个运行器参数SpringJUnit4ClassRunner.class @Parameters 指定参数类的参数数据集合 @Rule 允许灵活添加或重新定义测试类中的每个测试方法的行为 @FixMethodOrder 指定测试方法的执行...
主要特性:注入测试需要的助手类启动测试需要的任意的服务 运行测试之间的服务清理按照正确顺序启动多个服务 创建测试作用域绑定Acai 主要针对的是应用大型功能测试。安装 <groupId>com.google.acai</groupId> ...
Junco(JUN-int + CO-verage)是Surefire提供程序,它执行JUnit测试用例并使用Jacoco计算每个测试用例的覆盖率。 Junco只需连接到Jacoco代理,转储当前的覆盖率信息并重置命中计数器。 每次执行一个测试用例时都要...
Acai使它变得简单: 将所需的帮助程序类注入测试启动测试所需的任何服务测试这些服务之间进行测试以正确的顺序启动多个服务以进行测试创建测试范围的绑定Acai专为应用程序的大型功能测试而设计。 例如,它可以帮助...
与Queue对应的测试类,应用的junit3标准。实现了队列那六项的测试。
本系列练习和作业在 Java unsing Junit 中实现了社交网络应用程序的帐户相关 API。 API 由SocialNetwork类提供给用户。 业务逻辑主要在代表与用户或成员相关联的信息的较低级别类中: Account 。 您将修改和扩展此...
TestNG是一个开源的自动化测试框架,它受JUnit框架启发而实现的,TestNG可以让开发者和测试者能够通过简单的注解、分组、指定顺序、参数化就可以编写更加灵活、更加强大的测试用例。 TestNG可以跟web自动化框架...
授权协议:Apache开发语言:Java操作系统:跨平台NoSQLUnit详细介绍NoSQLUnit是一个JUnit的扩展,用来为那些使用了NoSQL后端的应用提供单元测试和集成测试的工具。使用示例:/授权协议:Apache开发语言:JavaScript操作...
1,对于单元测试对比JSON,可使用文档中第一个工具集。 2,对于API响应JSON数据,需要对比时使用文档中第二个工具集,可以指定忽略噪声字段,比较强大。 不废话:https://github.com/kvnxiao/jsonequals 使用至今,...
与JUnit(@Category)和PHPUnit(@group)不同,Jasmine JavaScript单元测试不支持分组测试。 用户必须手动设置fdescribe来专注于几个相关的测试用例。 执行顺序受测试用例名称的限制。 用户很难控制执行顺序。 ...
欢迎来到Emcee项目,这是在本地和许多Mac上并行运行...它管理测试执行的顺序,模拟器,并与正在运行的测试一起维护队列。 它可以生成Junit和跟踪报告,以使您了解测试运行在不同计算机上的表现。 使用Emcee最新文档是
共享队列管理测试执行的顺序。 司仪工作人员自动执行测试并维护其模拟器的生命周期。 Emcee可以生成Junit和跟踪报告,以使您了解不同计算机上的测试运行情况。 使用司仪 最新文档可在。 特征 使用简单的JSON文件...
本章学习目标 Spring 框架简介 SpringIOC 的概念和作用 工厂模式设计一个简单的IOC 容器 SpringIOC 的XML 方式HelloWorld SpringIOC 的XML 方式创建对象配置细节 ... Spring 整合Junit 简化测试类编写
apiCrawler ...测试用例集(TestStepModel)的测试步骤序列是测试步骤(TestStep)的有序集合,测试步骤有顺序或依赖关系。 测试用例集(TestStepModel)之间是无序,形成测试场景,在ApiTest中使用Junit5
数据驱动的测试使用SQLite作为数据源,并使用JUnit 4功能进行参数化测试。 我使用的IDE是Eclipse。 一些有用的功能:数据驱动的测试使用SQLite数据库和Java 1.8的try-as-a-resource功能来关闭文件。 SQLite数据库...
JUnit、Mockito 和 IntelliJ 在 Java 中进行测试驱动开发 (TDD) 的基础知识。 我们假设我们不需要说服您为什么要进行 TDD,我们只会稍微触及 TDD 的原则。 相反,我们将专注于内容和方式。 什么是TDD? TDD 是在实现...