JUnit for Android入门2 JUnit断言

JUnit断言

  • JUnit提供了一些辅助函数,用来帮助我们确定被测试的方法是否按照预期正常运行,这些辅助函数我们称之为断言。

  • JUnit4所有的断言都在org.junit.Assert类中,Assert类包含一组静态的测试方法,用于验证期望值excepted与实际值actual之间的逻辑关系是否正确,用于验证测试是否通过。

  • 使用是通常在Java代码加入如下import static org.junit.Assert.*

  • assertEquals([message],excepted,actual)
    验证期望值与实际值是否相等,不相等则表示测试未通过,并抛出异常AssertError,message表示自定义错误信息,为可选参数;相等则表示测试通过。

    示例代码片段:
    String s1="test";
    String s2="test";
    assertEquals(s1,s2);
    
  • assertNotEquals([message],unexcepted,actual)
    验证测试结果值不会是某个值(unexcepted)

  • assertArrayEquals([message],excepteds,actual)
    验证两个数组是否相同

  • assertSame([message],excepted,actual)
    验证期望对象引用与实际对象引用是否指向同一个对象

    int s1="test";
    int s2="test";
    assertSame(s1,s2);//结果pass
    int[] array1={1,2,3};
    int[] array2={1,2,3};
    assertSame(array1,array2)//结果fail
    
  • assertNotSame([message],excepted,actual)
    验证期望对象引用与实际对象引用是否指向不同对象

  • assertNull([message],object)
    断言某个对象为null

  • assertNotNull([message],object)
    断言某个对象不为null

  • asssertTrue([message],condition)
    验证条件为真

  • assertFalse([message],condition)
    验证条件为假

更为灵活的断言

Hamcrest类库

  • Hamcrest类库中的核心方法assertThat

    • JUnit结合Hamcrest提供了一个全新的断言语法:assertThat,结合Hamcrest提供的匹配符,可以表达全部的测试思想
    • 使用gradle引入JUnit4.12时已经包含了hamcrest-core.jar、hamcrest-library.jar、hamcrest-integration这三个包,所以我们无需额外再单独导入hamcrest相关类库。
    • 需要加入对hamcrest包的依赖,在app目录下的build.gradle的dependencies下添加如下内容:
      testImplementation 'org.hamcrest:hamcrest-library:1.3'
    • 字符串相关匹配符:
      • 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
    //示例:
    package com.example.myapplication;
    import org.junit.Test;
    import static org.hamcrest.MatcherAssert.*;
    import static org.hamcrest.CoreMatchers.*;
    import static org.hamcrest.Matchers.equalToIgnoringWhiteSpace;
    import static org.hamcrest.text.IsEqualIgnoringCase.equalToIgnoringCase;
    
    public class TestJUnitLifeCycle {
    	@Test
    	public void test3(){
    	        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 "));
        }
    }
    

JUnit设定方法执行顺序

  • 当我们运行一个测试类里所有测试方法时,测试方法的执行顺序并不固定
  • JUnit4提供@FixMethodOrder注解来配置执行顺序,其可选值有:
    • MethodSorters.NAME_ASCENDING
    • MethodSorters.DEFAULT
    • MethodSorters.JVM
package com.example.myapplication;

import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestExecOrder {
    @Test
    public void testD(){
        System.out.println("DDDDD");
    }
    @Test
    public void testA(){
        System.out.println("AAAAA");
    }
    @Test
    public void testB(){
        System.out.println("BBBBB");
    }
    @Test
    public void testC(){
        System.out.println("CCCCC");
    }

}

TestRunners

  • @RunWith
  • 通过@RunWith注解,可以为我们的测试用例选定一个特定的Runner来执行
  • 默认的test runner是BlockJUnit4ClassRunner

Suite测试套件

  • 如果有三个测试类,使用Suite编写一个TestSuite类,我们可以将3个测试类组合起来一起执行
//测试套件示例
@RunWith(Suite.class)
@Suite.SuiteClasses({
		TestLogin.class,
		TestLogout.class,
		TestUpdate.class
})
public class TestSuite{
		//不需要有任何实现方法
}
  • 测试套件还可以嵌套
@RunWith(Suite.class)
@Suite.SuiteClasses(TestSuite.class)
public class TestSuite2{

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值