zoukankan      html  css  js  c++  java
  • JUnit使用参数测试和一组测试

    JUnit该参数测试和一组测试使用简单

    参数测试

    作为替代阵列int a0,a1,a2喜欢,当测试加法assertEquals(3.0, h.add(1, 2), 0.1);相当于声明一个变量,要測试100个怎么办。

    所以,有了參数化測试,使用一个Collection收集全部的数据——加法时每一次測试须要的几个数据构成一组,n个组构成Collection

    然后依照JUnit的使用方法要求,写出单元測试类。(偷懒一下,不想写被測试的业务类X了。

    以下的样例中如果要測试的方法是,推断一个数是否奇数。)

    package myTest.param;
    import java.util.Arrays;
    import java.util.Collection;
    
    import org.junit.Test;
    import org.junit.runners.Parameterized;
    import org.junit.runners.Parameterized.Parameters;
    import org.junit.runner.RunWith;
    import static org.junit.Assert.assertEquals;
    
    @RunWith(Parameterized.class)//1.必须
    public class ParametTestUnit {
        private int input;
        private boolean expected;//expected result
        /**
         * 2.public 构造器赋值一组測试数据
         */
        public ParametTestUnit(int input,boolean expected ) {
            this.input = input;
            this.expected = expected;
        }
    
        /**
         * 3.由@Parameterized.Parameters修饰一个
         * public static Collection xxx()
         */
        @Parameterized.Parameters
        public static Collection data() {
            return Arrays.asList(new Object[][] {
                { 1, true },
                { 3, true },//
                { 6, false },
                { 11, true },
                { 22, false },
                { 23, true }
            });
        }
    
        /**
         * 4.JUnit循环地使用各组数据
         */
        @Test
        public void testOdd() {
            System.out.println("Parameterized Number is : " + input);
            assertEquals(expected, input%2!=0);
        }
    }
    如今这个单元測试类编写完毕,可是在BlueJ中不可以直接执行它(不支持?)。自己写一个Main好了。

    package myTest.param;
    import org.junit.runner.JUnitCore;
    import org.junit.runner.Result;
    import org.junit.runner.notification.Failure;
    
    public class Main {
       public static void go() {
          Result result = JUnitCore.runClasses(ParametTestUnit.class);
          for (Failure failure : result.getFailures()) {
             System.out.println(failure.toString());
          }
          System.out.println(result.wasSuccessful());
       }
    }
    执行结果:

    Parameterized Number is : 1
    Parameterized Number is : 3
    Parameterized Number is : 6
    Parameterized Number is : 11
    Parameterized Number is : 22
    Parameterized Number is : 23
    true

    如今,将某个数据改动一下,如{ 11, true }改成{ 10, true },执行结果:
    Parameterized Number is : 1
    Parameterized Number is : 3
    Parameterized Number is : 6
    Parameterized Number is : 10
    Parameterized Number is : 22
    Parameterized Number is : 23
    testOdd[3](myTest.param.ParametTestUnit): expected:<true> but was:<false>
    false

    表示第3个数据(基于0)有问题。

    成组測试

    有非常多单元測试类须要測试,将它们组成一个Suite。大家一起測试。

    比如新写了两个单元測试类:

    package myTest.param;
    import static org.junit.Assert.assertEquals;
    public class AddUnit1 {
        @org.junit.Test
        public void testAdd() {	
            System.out.println("Inside AddUnit1");    
            assertEquals(3, 1+2);     
        }
    }
    package myTest.param;
    import static org.hamcrest.CoreMatchers.*;
    import static org.junit.Assert.*;
    public class AddUnit2 {
        @org.junit.Test
        public void testSth() {	
            System.out.println("Inside AddUnit2");    
            assertThat("Zero is one", 0, is(not(1))); // passes   
            assertThat("Zero is one", 0, is(1)); //fail
        }
    }
    将它们组成一个Suite,须要写捆绑代码,清晰起见。单独用一个类。

    package myTest.param;
    import org.junit.runner.RunWith;
    import org.junit.runners.Suite;
    @RunWith(Suite.class)
    @Suite.SuiteClasses({
       AddUnit1.class,
       AddUnit2.class,
       //ParametTestUnit.class
    })
    public class SuiteUnit {}
    还是用上面的Main,改动为runClasses(SuiteUnit.class); 执行结果:
    Inside AddUnit1.testAdd()
    Inside AddUnit2.testSth()
    testSth(myTest.param.AddUnit2): Zero is one
    Expected: is <1>
         got: <0>


    false

    能够把对ParametTestUnit.class的測试也加进来。执行结果:

    Inside AddUnit1.testAdd()
    Inside AddUnit2.testSth()
    Parameterized Number is : 1
    Parameterized Number is : 3
    Parameterized Number is : 6
    Parameterized Number is : 10
    Parameterized Number is : 22
    Parameterized Number is : 23
    testSth(myTest.param.AddUnit2): Zero is one
    Expected: is <1>
         got: <0>


    testOdd[3](myTest.param.ParametTestUnit): expected:<true> but was:<false>
    false




    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    AJ学IOS(47)之网易彩票帮助界面UIWebView的运用
    AJ学IOS(46)之网易彩票幸运大转盘
    AJ学IOS(45)之常用的小功能比如打电话、打开网址、发邮件、发短信打开其他应用。
    AJ学IOS(44)之网易彩票自定义图片在右边的Button_弹出view_ios6,7简单适配
    AJ学IOS(43)之网易彩票底部自定义TabBar实现切换
    AJ学IOS(42)UI之核心动画CAAnimationGroup以及其他
    数组扁平化方法
    Echart数据转换(水平数据变成垂直数据)
    划重点简易版
    获取鼠标点击位置坐标
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4729556.html
Copyright © 2011-2022 走看看