- 浏览: 7929260 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 777https://www.douban.com/note/569 ... -
Web网站压力及性能测试
2017-10-09 19:59 692https://segmentfault.com/a/1190 ... -
收藏两个不错的开源国内测试框架
2017-01-09 17:36 2482参考https://my.oschina.net/gi ... -
来自美团的测试模版
2016-05-01 08:44 1135来自美团的测试模版,从各个方面给了不错的范例, 适合中小团队快 ... -
junit 4.11配合Hamcrest
2015-02-12 09:49 1273Hamcrest下载地址为https://code.googl ... -
Selenium中执行Javascript
2015-01-12 11:20 943Selenium中执行Javascript方法如下 ... -
selenium 2中查找所有指定类型的元素
2014-06-02 11:09 7798在selenium 2中,经常要统计或者查找指定类型的元素 ... -
收藏一个不错的selenium教程系列
2014-06-01 11:19 1775http://www.cnblogs.com/sdet/tag ... -
selenium 2中的pageobject学习
2014-05-24 12:28 6944先来看下,用普通的方法如何进行webdrviver的测试 ... -
testng中动态添加注解
2014-05-24 10:14 4612最近看了下testng,的确发觉testng是强大的工具, ... -
在Selenium WebDriver中执行javascript
2014-05-22 20:55 4187在Selenium WebDriver中执行javascr ... -
测试用例之优先级排序
2014-05-13 23:07 2013测试用例按照风险管理的方法,设置三个属性:bug发生概率的 ... -
junit4之Assume.assumeTrue
2014-03-16 12:05 3443在junit测试的时候,如果有的时候必须规定具备某个条件 ... -
junit之记录执行的listener
2014-03-16 11:38 4172在junit 4中,有的时候可以在所有测试开始前,后,每个 ... -
junit 4中的测试套件
2014-03-09 08:28 1767在JUnit4中,如果想要同时运行多个测试类,需要使用两个注 ... -
junit测试之并行测试
2014-03-06 23:20 2969在junit中,还可以同时执行多个单元测试,例子如下: ... -
junit复习1 @before class @after class
2014-02-21 11:11 1044先看代码 public class Junit ...
相关推荐
本实验“自动饮料机Junit测试”旨在帮助学生深入理解和应用单元测试,特别是在Java编程环境下。单元测试是一种针对程序代码最小可测试单元进行验证的方法,通常这个单元是函数或方法。Junit是Java领域广泛使用的单元...
JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。在本文中,我们将深入探讨JUnit的核心概念、关键特性以及如何使用JUnit3进行测试。 首先,理解单元测试的概念...
本资源"JUnit_Test_Code.zip"包含了一份关于如何使用JUnit进行测试的实例,以及图文并茂的讲解,对于理解和实践JUnit测试脚本非常有帮助。 在Java开发中,单元测试是对软件中的最小可测试单元进行检查和验证的过程...
JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了一种方便、高效的方式来验证代码的正确性。这个压缩包文件包含了JUnit4的相关库,使得开发人员能够轻松地在他们的项目中引入单元测试功能。...
本文将详细介绍JUnit测试工具及其安装方法。 **一、JUnit简介** JUnit是一个开源的、基于Java的测试框架,主要用于编写和运行可重复的单元测试。它的设计理念是使测试成为开发过程中的一个自然部分,通过自动化测试...
- **测试的顺序**:虽然JUnit测试默认无序执行,但可以通过`@FixMethodOrder`控制执行顺序。 7. **总结** JUnit作为Java单元测试的标准工具,其强大的功能和简洁的API使得测试工作变得高效。理解并熟练掌握JUnit...
JUnit Vintage用于支持旧版本的JUnit测试运行。其TestEngine允许在JUnit 5平台上运行基于JUnit 3和JUnit 4的测试。这对于迁移旧代码库和维护向后兼容性非常重要。 JUnit 5要求运行时的Java版本为Java 8或更高。尽管...
- **实验1JUnit单元测试基础.doc:** 这个文档可能详细介绍了如何编写第一个JUnit测试用例,包括基本的断言和测试方法的构造。 - **Junit源代码学习.pdf:** 这份PDF可能包含了对JUnit框架内部实现的深入分析,帮助...
综上所述,"junit单环测试包括文档和jar文件"意味着我们拥有JUnit测试框架的使用文档和库,可以进行详细的单元测试,包括可能涉及循环结构的复杂场景。通过理解和应用这些知识,我们可以更有效地测试和维护我们的...
JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可重复运行的测试用例,以确保代码的正确性和稳定性。单元测试是软件开发过程中的一个重要环节,它旨在对程序中的最小可测试单元——通常是单个...
【基于标注的JUnit测试】 JUnit是Java开发中最常用的单元测试框架之一,它允许开发者编写可重复执行的测试用例来验证代码的正确性。在JUnit4及其后续版本中,引入了基于注解的测试,这大大简化了测试的编写,避免了...
随着软件的迭代和更新,测试用例也需要随之调整,以确保其始终与最新的功能和需求保持一致。此外,测试用例的详尽程度对测试工作量和时间安排有直接影响,合理的测试用例设计可以更好地规划测试周期。 在企业级软件...
JUnit是Java编程语言的单元测试框架,用于编写和可重复运行的自动化测试。JUnit4通过注解的方式来识别测试方法。目前支持的主要注解有(下列注解标示了单元测试的不同运行阶段执行的代码): @BeforeClass 全局只会...
JUnit是Java编程语言中最常用的单元测试框架之一,主要用于编写和执行可重复的、自动化测试用例,以确保代码的质量和功能正确性。Junit 4.2是该框架的一个特定版本,它带来了许多改进和特性,使得测试过程更加高效和...
每个测试用例应尽可能地独立于其他用例,确保它们的执行顺序不会影响测试结果。例如: ```java import org.junit.*; public class MyTestClass { @Test public void testExample() { // 测试代码 assertEquals...
JUnit 5是Java编程语言中最流行的单元测试框架之一,它为开发者提供了强大的测试能力,让代码质量得到了显著提升。这个名为"junit5-samples"的压缩包包含了一个使用JUnit 5的示例应用程序集合,旨在帮助开发者更好地...
5. **固定测试顺序**:Junit 3.8默认按照方法名的字母顺序运行测试,但可通过`@FixMethodOrder`注解指定执行顺序。 6. **测试注解**:如`@Before`和`@After`分别表示在每个测试方法前和后执行的方法,`@BeforeClass...
JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。这里我们关注的是JUnit的两个不同版本:JUnit 4.4和JUnit 3.8.1。这两个版本在功能、设计和使用上都有所差异,...
JUnit测试框架是Java编程语言中最常用的单元测试工具之一,它为开发者提供了一种方便、高效的方式来验证代码的正确性。标题中的"junit测试jar"指的是JUnit库的JAR文件,这些文件通常用于构建和执行Java应用程序的...