JUnit 的常用语法使用

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 map = new HashMap();
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 list = new ArrayList();
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 的常用语法使用)