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对象去替代、去模拟;

posted @ 2018-01-02 00:04  Drajun  阅读(213)  评论(0编辑  收藏  举报