Android JUnit进阶

这次学习的是JUnit的注解和使用

先看一下上次代码

public class CalculationTest {

    @Test
    public void add() {
        assertEquals(6, new Calculation().add(3, 3));
    }

    @Test
    public void sub() {
        assertEquals(1, new Calculation().sub(3,2));
    }

    @Test
    public void times() {
        assertEquals(6, new Calculation().times(3,2));
    }

    @Test
    public void division() {
        assertEquals(3, new Calculation().division(6,2));
    }
}

不知道,大家有没有感觉代码重复率高。虽然方法可以自动创建的。

每一个方法都需要创建Calculation 对象,在Android中一般都会在一个初始化的方法解决掉。

JUint提供了一写注解帮助大家减少工资量。

先来看看JUnit注解

注解 描述
@Test public void method() 简单说就是用这个注解的代表的是一个测试用例
@Before public void method() Before注释表示,该方法必须在类中的每个测试之前执行,以便执行测试某些必要的先决条件。
@BeforeClass public static void method() BeforeClass注释指出这是附着在静态方法必须执行一次并在类的所有测试之前。发生这种情况时一般是测试计算共享配置方法(如连接到数据库)。
@After public void method() After 注释指示,该方法在执行每项测试后执行(如执行每一个测试后重置某些变量,删除临时变量等)
@AfterClass public static void method() 当需要执行所有的测试在JUnit测试用例类后执行,AfterClass注解可以使用以清理建立方法,(从数据库如断开连接)。注意:附有此批注(类似于BeforeClass)的方法必须定义为静态。
@Ignore public static void method() 当想暂时禁用特定的测试执行可以使用忽略注释。每个被注解为@Ignore的方法将不被执行。

注意:上面的每一个方法,都有对应的重载方法,可以在前面加一个String类型的参数,表示如果断言失败时的提示。

 修改后

public class CalculationTest {

    private static Calculation mCalculation;

    @BeforeClass
    public static void init() {
        mCalculation = new Calculation();
    }


    @Test
    public void add() {
        assertEquals(6, mCalculation.add(3, 3));
    }

    @Test
    public void sub() {
        assertEquals(1, mCalculation.sub(3, 2));
    }

    @Test
    public void times() {
        assertEquals(6, mCalculation.times(3, 2));
    }

    @Test
    public void division() {
        assertEquals(3, new Calculation().division(6, 2));
    }
}

验证所有注解

public class CalculationTest {

    private static Calculation mCalculation;

    // 测试类第一次执行的时候执行
    @BeforeClass
    public static void init() {
        System.out.println("BeforeClass");
    }

    // 每个测试方法执行的时候,先执行这个方法
    @Before
    public void before() {
        System.out.println("每次执行test方法前,先调用我");
    }

    // 每次执行测试方法后,再执行这个方法
    @After
    public void after() {
        System.out.println("每次执行test方法后,先调用我");
    }

    // 测试方法
    @Test
    public void add() {
        System.out.println("add");
    }

    // 测试方法
    @Test
    public void sub() {
        System.out.println("sub");
    }

    // 测试方法
    @Test
    public void times() {
        System.out.println("times");
    }

    // 测试方法
    @Test
    public void division() {
        System.out.println("division");
    }

    // 每一个类执行到最后时候,会执行这个方法,再结束。
    @AfterClass
    public static void afterClass() {
        System.out.println("afterClass");
    }

    // 会被忽略的方法
    @Ignore
    public void Ignore() {
        System.out.println("Ignore");
    }
}

查看结果

二、断言

看看JUnit断言

断言 描述
void assertEquals([String message], expected value, actual value) 断言两个值相等。值可能是类型有 int, short, long, byte, char or java.lang.Object. 第一个参数是一个可选的字符串消息
void assertTrue([String message], boolean condition) 断言一个条件为真
void assertFalse([String message],boolean condition) 断言一个条件为假
void assertNotNull([String message], java.lang.Object object) 断言一个对象不为空(null)
void assertNull([String message], java.lang.Object object) 断言一个对象为空(null)
void assertSame([String message], java.lang.Object expected, java.lang.Object actual) 断言,两个对象引用相同的对象
void assertNotSame([String message], java.lang.Object unexpected, java.lang.Object actual) 断言,两个对象不是引用同一个对象
void assertArrayEquals([String message], expectedArray, resultArray) 断言预期数组和结果数组相等。数组的类型可能是 int, long, short, char, byte or java.lang.Object.
fail() 让测试方法失败

执行顺序:@BeforeClass –> @Before –> @Test –> @After –> @AfterClass

@Test 中指定 expected 的异常只是本测试方法的异常,如果调用中的方法抛异常还是会打印log出来

@RunWith(JUnit4.class)
public class Test {
    @org.junit.Test(expected = Exception.class)
    public void test() {
        Test test = new Test();
        test = null;
        test.test();
    }


}

JUnit基本学习就结束了。

发布了34 篇原创文章 · 获赞 30 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章