注解

  • @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()------

常用断言

  • 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()
    让测试方法失败

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());

作者:石头1314

链接:https://www.jianshu.com/p/e8fd66a665c6

來源:简书