美文网首页Java
JUnit 的常用语法使用

JUnit 的常用语法使用

作者: 石头1314 | 来源:发表于2018-07-19 16:02 被阅读104次

    1.注解

    • @Test
      说明该方法是测试方法。测试方法必须是public void,可以抛出异常。
    • @Before、@After
      @Before它会在每个测试方法执行前都调用一次。
      @After与@Before对应,它会在每个测试方法执行完后都调用一次。
    • @BeforeClass、@AfterClass
      @BeforeClass它会在所有的测试方法执行之前调用一次。与@Before的差别是:@Before注解的方法在每个方法执行前都会调用一次,有多少个测试方法就会掉用多少次;而@BeforeClass注解的方法只会执行一次,在所有的测试方法执行前调用一次
      @AfterClass与@BeforeClass对应,它会在所有的测试方法执行完成后调用一次。
      注意的是,被这两个annotation修饰的方法必须是静态的。
      这两个方法可以用来setup和release一些公共的资源
    • @Ignore
      忽略该测试方法,很多时候,因为某些原因(比如正式代码还没有实现等),我们可能想让JUnit忽略某些方法,让它在跑所有测试方法的时候不要跑这个测试方法,可以加上该注解。
      以上这些注解都是针对测试方法而言的,我们写个测试类来运行一下,看看具体的执行顺序,代码如下:
    public class Test {
    
        @BeforeClass
        public static void init() {
            System.out.println("------init()------");
        }
        @AfterClass
        public static void finish() {
            System.out.println("------finish()------");
        }
        @Before
        public void setUp() {
            System.out.println("------setUp()------");
        }
        @After
        public void tearDown() {
            System.out.println("------tearDown()------");
        }
        @Test
        public void test1() {
            System.out.println("------test1()------");
        }
        @Test
        public void test2() {
            System.out.println("------test2()------");
        }
    }
    
    ------init()------
    ------setUp()------
    ------test1()------
    ------tearDown()------
    ------setUp()------
    ------test2()------
    ------tearDown()------
    ------finish()------
    

    2.常用断言

    • assertEquals(expected, actual)
      验证expected的值跟actual是一样的,如果是一样的话,测试通过,不然的话,测试失败。如果传入的是object,那么这里的对比用的是equals()
    • assertNotEquals(unexpected, actual)
      验证期望值与实际值不相等。
    • assertTrue(boolean condition)
      验证contidion的值是true
    • assertFalse(boolean condition)
      验证contidion的值是false
    • assertNull(Object obj)
      验证obj的值是null
    • assertNotNull(Object obj)
      验证obj的值不是null
    • assertSame(expected, actual)
      验证expected和actual是同一个对象,即指向同一个对象
    • assertNotSame(expected, actual)
      验证expected和actual不是同一个对象,即指向不同的对象
    • Assert.fail()
      让测试方法失败

    3.Hamcrest与assertThat(使验证条件更加丰富,充分考虑测试过程中数据的变化)

    字符串相关匹配符

    startsWith
    endsWith
    containsString
    equalToIgnoringCase
    equalToIgnoringWhiteSpace

    数值相关匹配符

    closeTo
    greaterThan
    lessThan
    lessThanOrEqualTo
    greaterThanOrEqualTo

    集合相关匹配符

    hasEntry
    hasKey
    hasValue
    hasItem
    hasItems
    hasItemInArray

    对象相关匹配符

    notNullValue
    nullValue
    sameInstance
    instanceOf
    hasProperty

    组合等逻辑匹配符

    allOf
    anyOf
    both
    either
    is
    isA
    not
    any
    anything
    代码演示示列:

    //文本
    assertThat("android studio", startsWith("and"));
    assertThat("android studio", endsWith("dio"));
    assertThat("android studio", containsString("android"));
    assertThat("android studio", equalToIgnoringCase("ANDROID studio"));
    assertThat("android studio ", equalToIgnoringWhiteSpace(" android studio "));
    
    //数字
    //测试数字在某个范围之类,10.6在[10.5-0.2, 10.5+0.2]范围之内
    assertThat(10.6, closeTo(10.5, 0.2));
    //测试数字大于某个值
    assertThat(10.6, greaterThan(10.5));
    //测试数字小于某个值
    assertThat(10.6, lessThan(11.0));
    //测试数字小于等于某个值
    assertThat(10.6, lessThanOrEqualTo(10.6));
    //测试数字大于等于某个值
    assertThat(10.6, greaterThanOrEqualTo(10.6));
    
    //集合类测试
    Map<String, String> map = new HashMap<String, String>();
    map.put("a", "hello");
    map.put("b", "world");
    map.put("c", "haha");
    //测试map包含某个entry
    assertThat(map, hasEntry("a", "hello"));
    //测试map是否包含某个key
    assertThat(map, hasKey("a"));
    //测试map是否包含某个value
    assertThat(map, hasValue("hello"));
    List<String> list = new ArrayList<String>();
    list.add("a");
    list.add("b");
    list.add("c");
    //测试list是否包含某个item
    assertThat(list, hasItem("a"));
    assertThat(list, hasItems("a", "b"));
    //测试数组是否包含某个item
    String[] array = new String[]{"a", "b", "c", "d"};
    assertThat(array, hasItemInArray("a"));
    
    //测试对象
    //测试对象不为null
    assertThat(new Object(), notNullValue());
    Object obj = null;
    //测试对象为null
    assertThat(obj, nullValue());
    String str = null;
    assertThat(str, nullValue(String.class));
    obj = new Object();
    Object obj2 = obj;
    //测试2个引用是否指向的通一个对象
    assertThat(obj, sameInstance(obj2));
    str = "abc";
    assertThat(str, instanceOf(String.class));
    
    //测试JavaBean对象是否有某个属性
    assertThat(new UserInfo(), hasProperty("name"));
    assertThat(new UserInfo(), hasProperty("age"));
    
    //-------组合逻辑测试--------
    //两者都满足,a && b
    assertThat(10.4, both(greaterThan(10.0)).and(lessThan(10.5)));
    //所有的条件都满足,a && b && c...
    assertThat(10.4, allOf(greaterThan(10.0), lessThan(10.5)));
    //任一条件满足,a || b || c...
    assertThat(10.4, anyOf(greaterThan(10.3), lessThan(10.4)));
    //两者满足一个即可,a || b
    assertThat(10.4, either(greaterThan(10.0)).or(lessThan(10.2)));
    assertThat(10.4, is(10.4));
    assertThat(10.4, is(equalTo(10.4)));
    assertThat(10.4, is(greaterThan(10.3)));
    str = new String("abc");
    assertThat(str, is(instanceOf(String.class)));
    assertThat(str, isA(String.class));
    assertThat(10.4, not(10.5));
    assertThat(str, not("abcd"));
    
    assertThat(str, any(String.class));
    assertThat(str, anything());
    

    文章借鉴与:
    https://www.jianshu.com/p/06124ddc6c68
    http://chriszou.com/2016/04/18/android-unit-testing-junit.html

    相关文章

      网友评论

        本文标题:JUnit 的常用语法使用

        本文链接:https://www.haomeiwen.com/subject/ilyzpftx.html