`

java 单元测试类指定方法执行顺序

阅读更多

java 单元测试类指定方法执行顺序

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");
    }
} 

 实际上 Junit里是通过反射机制得到某个Junit里的所有测试方法,并生成一个方法的数组,然后依次执行数组里的这些测试方法;
而当用annotation指定了执行顺序,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");  
        }  
    }  

 

分享到:
评论

相关推荐

    android不用另建工程进行单元测试及改变测试方法执行顺序示例代码

    JUnit是一个广泛使用的Java测试框架,它允许我们定义测试类和测试方法来验证代码的正确性。Mockito则是一个强大的模拟库,可以让我们在测试中隔离依赖,使得我们可以专注于测试单个组件的功能。 在Android Studio中...

    testng注解方法执行顺序

    它提供了一个丰富的注解系统,用于控制测试的执行顺序,以及对测试方法和测试类进行组织和管理。下面我们将详细介绍TestNG注解方法的执行顺序,以及相关的关键知识点。 首先,了解TestNG的测试执行顺序是非常重要的...

    java简单方法顺序调用注解

    标题中的“java简单方法顺序调用注解”是指使用注解来控制类中方法的执行顺序。这在某些场景下非常有用,比如初始化逻辑、测试脚本或者需要特定顺序执行的任务。下面我们将深入探讨如何实现这一功能。 首先,我们...

    批处理执行java项目main方法

    批处理执行Java项目中的Main方法是一种常见的自动化操作,尤其在持续集成或测试环境中十分有用。批处理文件(.bat)是Windows操作系统中的脚本文件,它包含了一系列命令,可以按顺序执行,简化复杂的操作流程。 在...

    转:EasyMock 单元测试

    EasyMock 是一个流行的 Java 单元测试框架,它帮助开发者创建模拟对象来测试目标类的行为。这篇文档将深入探讨 EasyMock 的使用方法和原理,以便更好地理解和应用这一工具。 首先,让我们理解 EasyMock 的核心概念...

    junit4单元测试

    为了控制测试的执行顺序,JUnit4提供了`@FixMethodOrder`和`@Test(order = N)`注解,使得你可以按照指定的顺序执行测试方法。这在某些需要特定执行顺序的场景下很有帮助。 除了基本的测试功能,JUnit4还可以与其他...

    Selenium运行多测试类多个用例时程序设计方案

    - **无序的多case测试**:若不关心执行顺序,只需在每个测试类或用例前初始化Selenium,然后调用相应的测试方法,结束后关闭Selenium会话。 - **有序的多case测试**:如果需要按特定顺序执行,可以在每个测试类中...

    JAVA中常用类的常用方法.pdf

    JAVA中常用类的常用方法主要涵盖了java语言中基础类库的关键类以及它们提供的主要方法。以下是针对文档内容的详细解释: 1. java.lang.Object类 Object类是Java中所有类的超类,它提供了多种方法,这些方法在Java中...

    java测试新技术-TestNG和高级概念

    TestNG允许开发者配置测试执行的并行级别,例如按测试类并行,按方法并行,或者根据自定义逻辑来实现更复杂的并行策略。 11. 报告和日志生成:TestNG能够生成详细的测试报告和日志文件,这些报告通常包含了测试的...

    TestNG系列教程并行执行测试Java开发Java经验技

    4. **测试套件(Test Suites)**:TestNG允许创建测试套件(Test Suites),这是一个包含多个测试类或测试方法的XML文件。在测试套件中配置并行执行,可以控制整个测试集的并发行为。 5. **Listeners**:TestNG支持...

    Junit4 Test 单元测试

    每个测试用例应尽可能地独立于其他用例,确保它们的执行顺序不会影响测试结果。例如: ```java import org.junit.*; public class MyTestClass { @Test public void testExample() { // 测试代码 assertEquals...

    testNG单元测试学习总结

    - **@BeforeClass** 和 **@AfterClass**: 表示在每个测试类的第一个测试方法执行前和最后一个测试方法执行后执行的方法。 - **@BeforeMethod** 和 **@AfterMethod**: 表示在每个测试方法执行前后执行的方法。 #### ...

    JAVA Socket远程执行任务

    - **客户端连接**:客户端使用Socket类的connect方法,指定服务器的IP地址和端口号,尝试建立连接。 - **数据交换**:连接建立后,客户端和服务器端都可以通过Socket对象的输入输出流进行数据的读写。这里,客户端...

    java记忆测试系统

    计时器功能可以通过Java的`javax.swing.Timer`类实现,它可以定期执行指定的任务,例如更新倒计时或者判断游戏是否超时。在处理图标匹配逻辑时,开发者可以利用数据结构,如数组或列表,存储已点击的方块信息,并...

    Java 类测试工具Junit 在Eclipse 中的使用

    - 在新创建的测试类中,可以使用 `@Test` 注解来定义测试方法。 - 使用前面介绍的 `Assert` 类的方法来编写断言。 例如,假设我们有一个简单的计算器类 `Calculator`,我们可以创建以下测试方法: ```java ...

    Junit API(java测试工具)

    3. `@FixMethodOrder`: 控制测试方法的执行顺序。 四、JUnit 5的新特性 JUnit 5引入了许多新特性,如: 1. 测试分组(@Tag):可以将测试分为不同的组,方便筛选运行。 2. 条件注解(@EnabledIf, @DisabledIf)...

    Java-filter测试程序

    当请求到达时,Filter会按照配置的顺序依次执行,直到请求传递到目标资源。 5. **Filter的实际应用**: - **安全控制**:Filter可以用来检查请求是否携带正确的认证信息,阻止未授权的访问。 - **性能优化**:...

Global site tag (gtag.js) - Google Analytics