zoukankan      html  css  js  c++  java
  • JUit——(三)JUnit核心对象(测试、测试类、Suit和Runner)

    JUnit的核心对象:测试、测试类、测试集(Suite)、测试运行器

    1. 测试:

    @Test注释的、公共的、不带有任何参数、并且返回void类型的方法

    2. 测试类:

    公共的,包含对应类的测试方法的类

    例如:CalculatorTest.java测试类,其中add()为测试方法

    package com.junit.MyClass;
    
    import org.junit.Before;
    import org.junit.Test;
    
    import static org.junit.Assert.*;
    
    /**
     * Created by lesley on 2017/1/14.
     */
    
    //测试类
    public class CalculatorTest {
        private Calculator calculator;
        @Before
        public void setUp() throws Exception {
            calculator = new Calculator();
        }
    
        //测试方法
        @Test
        public void add() throws Exception {
            assertEquals(calculator.add(3, 5), 8);
        }
    
    }

    JUnit在调用执行每个@Test方法之前,为测试类创建一个新的实例。这有助于提供测试方法之间的独立性,并且避免在测试代码中产生意外的副作用。因为每个测试方法运行于个新的测试类实例上,所以我们就不能在测试方法之间重用各个实例变量值。

    3. Assert

    为了进行验证,我们使用由JUnit的Assert类提供的assert方法:

    import static org.junit.Assert.*;

    其中常用的assert方法:

    1.assertEquals()方法,用来查看对象中存的值是否是期待的值,与字符串比较中使用的equals()方法类似;

    2.assertFalse()和assertTrue()方法,用来查看变量是是否为false或true,如果assertFalse()查看的变量的值是false则测试成功,如果是true则失败,assertTrue()与之相反。

    3.assertSame()和assertNotSame()方法,用来比较两个对象的引用是否相等和不相等,类似于通过“==”和“!=”比较两个对象;

    4.assertNull()和assertNotNull()方法,用来查看对象是否为空和不为空。

    4. Suit——测试集

    Suit是一个包含不同测试的容器,将多个相关的测试类归为一组,一起运行。

    同时Suit也是一个运行器,如果没有定义Suit测试集,那么JUnit会自动提供一个测试集,包含测试类中的所有测试。
    我们可以通过Suit进行批量操作:(前两章中有提到)

    AllTest.java

    package com.junit.MyClass;
    
    /**
     * Created by lesley on 2017/1/14.
     */
    import org.junit.runner.*;
    import org.junit.runners.Suite;
    
    @RunWith(Suite.class)
    @Suite.SuiteClasses({
            CalculatorTest.class,
            UserTest.class
    })
    public class AllTest {
    
    }

    5. 测试运行器

    测试运行器是JUnit用来管理测试类的生命周期,包括创建类、调用测试以及搜集结果。主要有几种:

    JUnit 自带的几个测试运行器都继承了 org.junit.runner.Runner 类。如果想创建你自己的测试运行器,你就需要展Runner 类。 


    5.1 参数运行器——Parameterized

    参数化的运行器允许使用不同的参数多次运行同一个测试。例如:

    ParameterizedCalculateTest.java:

    package com.junit.MyClass;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.junit.runners.Parameterized;
    
    import java.util.Arrays;
    import java.util.Collection;
    import static org.junit.Assert.*;
    
    /**
     * Created by lesley on 2017/1/14.
     */
    //使用Parameterized 的测试运行器来运行一个测试类
    // 1. 测试类必须用@RunWith注释,并且将Parameterized.class作为参数
    @RunWith(value = Parameterized.class)
    public class ParameterizedCalculateTest {
        // 2. 必须声明测试中所使用的所有的实例变量
        private double expected;
        private double value1;
        private double value2;
    
        //3. 提供一个@parameters注释的方法
        //1)这个方法的签名必须是: Parameters public static ja va.u til . Collect ion , 无任何参数。
        //2) Collecting元素必须是相同长度的数组。这个数组的长度必须要和唯一的构造函数的参数个数相同
        @Parameterized.Parameters
        public static Collection<Integer[]> getTestParameters(){
            return Arrays.asList(new Integer[][] {
                    {2, 1, 1},
                    {3,2,1},
                    {5,2,1}, //错误参数
                    }
            );
        }
    
        //4. 构造函数
        public ParameterizedCalculateTest(double expected, double value1, double value2){
            this.expected = expected;
            this.value1 = value1;
            this.value2 = value2;
        }
    
        //5. 测试
        @Test
        public void add(){
            Calculator calculator = new Calculator();
            assertEquals(expected, calculator.add(value1, value2), 0);
        }
    
    }

    逐步分析JUnit的运行过程

    JUnit调用了静态方法getTestParameters(),为其集合中的每个数组进行循环:

      调用构造函数,传入数组中的第一个元素:含有三个元素的数组{2, 1, 1},然后调用@Test方法。

  • 相关阅读:
    插头DP专题
    HDU 4873 ZCC Loves Intersection(JAVA、大数、推公式)
    HDU 4865 Peter's Hobby(概率、dp、log)
    HDU 4870 Rating(概率、期望、推公式) && ZOJ 3415 Zhou Yu
    HDU 4862 Jump(最小K路径覆盖)
    codeforces 449B Jzzhu and Cities (Dij+堆优化)
    2014 12th GDCPC 总结
    HDU 1693 Eat the Trees(插头DP、棋盘哈密顿回路数)+ URAL 1519 Formula 1(插头DP、棋盘哈密顿单回路数)
    UVALive 4949 Risk(二分网络流、SAP)
    Codeforces 1105D(双层广搜)
  • 原文地址:https://www.cnblogs.com/lesleysbw/p/6286160.html
Copyright © 2011-2022 走看看