zoukankan      html  css  js  c++  java
  • JUnit 两日游

    从一个简单的Junit demo到一个用户名与密码的验证

    学习Junit,首先肯定是要环境的搭建与配置。

    第一步,安装JDK,配置环境变量

    第二步,安装eclipse。OS X环境下,eclipse并不是免安装的。这也是需要耐心等待的。

    第三步,新建一个maven project。目录中会自动新建代码的folder和用于管理junit的test代码的folder。

    第四步,修改配置文件pom.xml,讲maven依赖配置为较新的版本。当然依个人爱好。之后便是等待环境built。从maven库下载相关的工具包。

    环境built好,便是学习的开始——junit api。许要说明的是,学习这个需要有一点点java基础,至少需要知道一些基本的语法和数据类型等,方法的定义,这个就不多说了。

    JUnit测试基本规则

    新建junit测试用例的class,名称最好要对应目标测试类,目标测试类名Test,如源代码类名HelloWorld,测试类就应命名为HelloWorldTest。

    测试方法上一行,一般要加上@Test,表示这是测试方法。测试方法名对应好被测试的方法,即test+被测试方法名(注意首字母大写)。

    junit已经封装了很多api,像最基本的断言assertion,有返回值类型为boolean的assertFalse(失败时返回值,false)/assertTrue(失败时返回值,true);也有通用类型的assertThat(失败时返回值,object1,object2)(可用于判断两个对象是否相同/相等),还有assertEquals等。

    asumeThat用作过滤条件,当参数满足asumeThat中的条件时,才可以执行下一步,类似于java的if()。

    比较assertThat、 assertEquals、 assertSame/assertNotSame

    相同点:

    1. assertThat和assertEquals、assertSame/assertNotSame都可以用于判断两个值相同/相等或者不同/不等

    2. assertEquals和assertThat都可以传两个参数或者三个参数。

    不同点:

    1.语法不同。assertEquals和assertThat有时不需要测试结果为失败时的输出断言,assertSame/assertNotSame则需要。

    2.使用范围不同。assertEquals传2个参数时,只用于比较两个int类型的值,即assertEquals(期望值,实际值),传三个参数时,可以与assertThat一样传任意对象;assertEquals用于比较两个值是否相等,不管其在内存中的存放位置,相当于java中的equals,而assertSame/assertNotSame不仅要比较值,还要比较位置,相当于java中的==。

    比较器:蓝布达表达式

    junit封装了一下自己的比较器,语法比较通俗,能读懂英语就可读懂代码。像allOf(a,b) 、anyOf(a,b)、either(a).or(b)  、both(a).and(b)等。比如下面一段代码:

    public void testAssertThatHamcrestCoreMatchers() {
    
        assertThat("good", allOf(equalTo("good"), startsWith("good")));
    
        assertThat("good", not(allOf(equalTo("bad"), equalTo("good"))));
    
        assertThat("good", anyOf(equalTo("bad"), equalTo("good")));
    
        assertThat(7, not(CombinableMatcher.<Integer> either(equalTo(3)).or(equalTo(4))));
    
        assertThat(new Object(), not(sameInstance(new Object())));
    
      }

    测试超时timeout

    对单个方法进行超时测试,

    Rule:对整个文件中的方法都测试timeout

    测试异常

    @Test(expected = **Exception.class)

    例如:

    @Test(expected = NullPointerException.class)
    
    public void testLengthArray(){
    
    HelloWorld hwd = new HelloWorld();
    
    hwd.lengthArray(null);
    
    }

    数据点批量测试

    @Theories

    @DataPoint 

    在你的测试类里,每一条定义常量的语句上方注明@DataPoint标签;在你的测试方法上注明@Theories标签,同时,在类外面也要标上@RunWith(Theories.class)。如下:

    @RunWith(Theories.class)
    
    public class HelloWorld2Test {
    
     
    
    @DataPoint
    
    public static String USERNAME_NULL = null;
    
    @DataPoint
    
    public static String USERNAME_NONE ="";
    
    @DataPoint
    
    public static String USERNAME_WITH_ZENG = "zeng";
    
    @DataPoint
    
    public static String USERNAME_WITH_SLASH = "wuqian101";
    
    @DataPoint
    
    public static String USERNAME_WITH_ZENGHUI = "zenghui222";
    
     
    
    @Theory
    
    public void testValidateUser1(String username) {
    
    HelloWorld2 hwd2 = new HelloWorld2();
    
    assumeThat(username, containsString("zenghui"));
    
    assertEquals(1, hwd2.validateUser(username));
    
    }

    每一个测试方法对应一个测试用例,则都要带上@Theory标签。

    标注要执行的测试方法与不执行的测试方法

    @ignore

    个别方法或者极少数方法需要不被执行时,就可在方法上标注@ignore

    @FixMethodOrder(MethodSorters.NAME_ASCENDING)

    该测试标签写于class外的上面,添加该标签,类中的测试方法会按照方法名的字母排序顺序来执行。

      

  • 相关阅读:
    线性代数之——对角化和伪逆
    线性代数之——基变换矩阵
    线性代数之——线性变换及对应矩阵
    线性代数之——SVD 分解
    线性代数之——相似矩阵
    线性代数之——正定矩阵
    2020 届计算机视觉算法工程师秋招进程
    BA 新web化 问题汇总
    下载
    Javascript ——Navigator对象
  • 原文地址:https://www.cnblogs.com/cherylwu/p/5218590.html
Copyright © 2011-2022 走看看