zoukankan      html  css  js  c++  java
  • Junit4学习笔记

    〇、JUnit的作用

    (1)    用于证明某段代码的行为确实和开发者所期望的一致;

    (2)    为了让代码更加完美;

    一、基本使用

              (1)导入Junit的jar包(Eclipse已经集成了);

              (2)新建一个类,该来要继承TestCase类;

           (3)编写一个方法,方法名随意,而后在方法内创建需要的对象或者变量赋值之类的;

              (4)使用断言,例如:assertEquals(“不相等”,9,8+1);该句意思为8+1是否等于9,若不等于则输出提示”不相等”,若相等则无输出,其中消息是可选的,可以不写;

              (5)直接运行该类,类里的所有方法会自动执行;

    二、断言分类举例

    1.assertTrue/False([String message,]boolean condition);
        判断一个条件是true还是false。感觉这个最好用了,不用记下来那么多的方法名。
    2.fail([String message,]);
        直接失败,可以有消息,也可以没有消息。
    3.assertEquals([String message,]Object expected,Object actual);
        判断是否相等,可以指定输出错误信息。
        第一个参数是期望值,第二个参数是实际的值。
        这个方法对各个变量有多种实现。在JDK1.5中基本一样。
        但是需要主意的是float和double最后面多一个delta的值。
    4.assertNotNull/Null([String message,]Object obj);
        判读一个对象是否非空(非空)。
    5.assertSame/NotSame([String message,]Object expected,Object actual);
        判断两个对象是否指向同一个对象。看内存地址。
    7.failNotSame/failNotEquals(String message, Object expected, Object actual)
        当不指向同一个内存地址或者不相等的时候,输出错误信息。
        注意信息是必须的,而且这个输出是格式化过的。

    //更多断言更详细用法请找Junit API

    三、hamcrest断言

              (1)Hamcrest比起JUnit的assert系列方法来,有更好的可读性,它按照参数从左到右的符合自然的顺序来展;

              (2)举例:

              assertThat(true,is(true));                              //判断条件真假

            assertThat("2",is(equalTo("2")));                          //判断相等

            assertThat("aBcD",is(equalToIgnoringCase("abcd")));      //不区分大小写判断

            assertThat("",isEmptyOrNullString());                //是否为null或者空字符串

            assertThat(null,is(nullValue()));                             //是否为null值

            assertThat(2,is(notNullValue()));                          //是否不为null值

            assertThat(2,greaterThan(1));                              //是否大于2

              assertThat(2,lessThan(1));                                    //是否小于1

            assertThat(2.01,closeTo(2,0.01));                        //是否在2+-0.01的区间内

            assertThat("xyz",is(anything()));                          //不管为任何值都会通过

    /////////////

    assertThat("result", both(containsString("r")).and(containsString("u")));    

             //是否包含‘r’和‘u’

            assertThat("result",either(startsWith("x")).or(containsString("r")));      

    //是否以x开头或者包含r

            assertThat("result",allOf(notNullValue(),containsString("s")));   //满足里面全部条件

            assertThat("result",anyOf(notNullValue(),isEmptyString()));     //满足里面的任意条件

    /////////////

              assertThat(map,hasEntry(“key1”,”value1”))     //Map里是否有为key1-value1的键值对

              assertThat(map,hasKey(“key1”))                          //Map里是否有为key1的键

    assertThat(map,hasValue(”value1”))                  //Map里是否有为value1的值

              assertThat(iterable,hasItem(“item1”))                       //集合里是否包含item1

    /////////////

    Person my=new Person("341024","ZhangKe",32);

            assertThat(my,instanceOf(Person.class));                                               //判断类型

            assertThat(my,not(sameInstance(new Person("341024"))));           //判断对象实例不相等

            assertThat(my,hasToString(equalTo("341024")));                                //判断toString之后的值

            assertThat(my,hasProperty("name"));                                                     //判断属性名

    //更多用法请查Hamcrest API

     

    http://junit.sourceforge.net/javadoc/index.html?org/hamcrest/core/package-summary.html

    四、测试套件

              (1)作用:将部分的测试方法封装到一起,然后由另一个测试类来调用;

              (2)使用

                       1.在新建的一个测试类中,添加public static Test suite()方法(该方法返回一个测试套件);

              2.方法内new一个TestSuite对象实例,使用该实例的方法.addTestSuite(测试类名.class);这样就可以把指定测试类里的所有测试方法包含进来;

                       3.也可以使用.addTest(测试类名.suite());包含其他测试类所建立的测试套件;

              4.同时使用.addTest(new 测试类名(“测试方法”));可以包含指定测试类的测试方法,用此方法之前得有一个带参构造器;这样就可以测试指定的测试方法,并且可以传递给其它测试类调用测试;

              5.return TestSuite对象实例;

              6.运行当前类;

    五、测试的初始化方法和结束方法

              (1)初始化:覆盖父类TestCase类的SetUp()方法,在每个测试方法运行之前都会运行该初始化方法;

              结束方法:覆盖父类TestCase的tearDown()方法,在每个测试方法运行完毕之后都会执行该结束方法;

             

    (3)    也可以在suite方法内new一个继承了TestSetUp类的对象,并将suite对象传入TestSetUp;而继承TestSetUp类的子类,需要在类里写SetUp()、tearDown()方法;

    六、注解

              (1)@Test:用在方法上面,表示这个方法是测试方法;(可加参数timeout,表示在规定的时间内得运行完,单位为毫秒;可加参数expected,值为异常.class)

              (2)@Ignore:忽视此测试方法;

              (3)@Before:用在方法上,执行当前类每个测试方法前,执行该方法,@After则相反;

              (4)@BeforeClass:用在方法上,在执行当前类的所有测试方法前,执行当前方法,@AfterClass则相反;

              (5)@SuiteClasses({测试类1.class,测试类2.class…..}):用在类上面,将多个测试类打包在一起,也可以指定suite;当使用@SuiteClasses时,得在前面加上@RunWith(Suite.class)表示使用suite运行器;

    七、测试哪些内容

              Right-BICEP

    (1)    right:结果是否正确;

    (2)    B:边界值(CORRECT);

    C:一致性(值是否符合预期的格式)

    O:有序性(一组的值是否有序或者无序)

    R:区间性(值是否在一个合理的区间)

    R:引用、耦合性(代码是否引用了一些不受代码本身直接控制的因素)

    E:存在性(值是否存在)

    C:基数性(输入输出的值是否与预期的数量相符)

    T:时间性(事情是否按顺序发生?是否在正确的时间?是否及时?)

    (3)    I:反向测试(比如1+1=2,反向2-1=1);

    (4)    C:交叉检查(多种不同的方法去测试是否得到一样的结果);

    (5)    E:强制产生错误;

    (6)    P:性能

    八、Mock对象

              当要创建真实的对象有困难时,编写Mock对象去替代、去模拟;

  • 相关阅读:
    结果填空:青蛙爬井
    天上的星星 (前缀和)
    Poj3253 Fence Repair (优先队列)
    Requests+BeautifulSoup+正则表达式爬取猫眼电影Top100(名称,演员,评分,封面,上映时间,简介)
    数字图像处理之几种滤波器
    CodeForces
    直方图部分
    Codeforces Round #431 (Div. 2)
    2017中国大学生程序设计竞赛
    C++中数字与字符串之间的转换(转载自http://www.cnblogs.com/luxiaoxun/)
  • 原文地址:https://www.cnblogs.com/Drajun/p/8169584.html
Copyright © 2011-2022 走看看