这次学习的是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基本学习就结束了。