目录
- 注解简介
- 执行过程注解的使用
- 其他注解的使用
注解简介
JUnit包中包含了一些注解的使用,其中有以下一些注解:
@Before
该方法在每次测试方法调用前都会调用@Test
说明了该方法需要测试@BeforeClass
该方法在所有测试方法之前调用,只会被调用一次@After
该方法在每次测试方法调用后都会调用@AfterClass
该方法在所有测试方法之后调用,只会被调用一次@Ignore
忽略该方法@RunWith 和 @Suite
套件测试
执行过程注解的使用
在注解简介中我们提到的前五个注解都是执行过程的注解,接下来我们来看看如何使用:
public class AnnotationsTest {
private static final String TAG = "AnnotationsTest";
@Before
public void before() {
System.out.println(TAG + "===before===");
}
@BeforeClass
public static void beforeClass() {
System.out.println(TAG + "===beforeClass===");
}
@Test
public void testOne() {
System.out.println(TAG + "===testOne===");
}
@Test
public void testTwo() {
System.out.println(TAG + "===testTwo===");
}
@After
public void after() {
System.out.println(TAG + "===after===");
}
@AfterClass
public static void afterClass() {
System.out.println(TAG + "===afterClass===");
}
}
我们可以查看一下运行的结果:
在这里我们可以看到我们使用了两个@Test注解,因此会分别运行一次testOne()和testTwo()方法,而@Before和@After是在@Test标注的方法前后分别运行一次,因此会有两次运行,最后@BeforeClass和@AfterClass是指在类运行前和后分别运行一次,因此出现在运行的最前面和最后面。
其他注解的使用
使用忽略@Ignore
我们在上面运行的代码中添加testThree()方法,并用@Ignore和@Test标注然后运行:
@Ignore
@Test
public void testThree() {
System.out.println(TAG + "===testThree===");
}
查看运行结果为:
我们可以看到期中testThree()方法是不一样的,表示没有运行,查看运行的接口也可以看出没有执行testThree()方法。这个比较适合我们使用在多个方法测试时,需要忽略其中的某些已经测过的方法使用。
注意:
1、在Android中书写测试时,不能使用Log,不然会报错,这是因为JUnit相当于在Java环境下进行测试,是没有Android的Log的。
2、使用@BeforeClass和@AfterClass修饰的必须是静态方法
套件测试@RunWith 和 @Suite
1、被测试的类
public class SuitTestUtils {
private String str = "Suit Test Utils";
public SuitTestUtils(String str) {
this.str = str;
}
public String addString(String a) {
str = str + a;
System.out.println(str);
return str;
}
public String printString() {
System.out.println(str);
return str;
}
}
在这个类中有两个方法需要测试,我们分别在一个测试类中测试期中的一个方法。
2、测试的类
import org.junit.Before;
import org.junit.Test;
public class SuitOneTest {
private String str = "Suit One Test";
private SuitTestUtils utils;
@Before
public void setUp() {
utils = new SuitTestUtils(str);
}
@Test
public void testPrintString() {
utils.printString();
}
}
SuitOneTest 类用来测试printString()方法
import org.junit.Before;
import org.junit.Test;
public class SuitTwoTest {
private String str = "Suit Two Test";
private SuitTestUtils utils;
@Before
public void setUp() {
utils = new SuitTestUtils(str);
}
@Test
public void testAddString() {
utils.addString(" Hello world");
}
}
SuitTwoTest 类用来测试addString()方法
确定这两个类都是可以跑通的。
3、套件测试的类
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({SuitOneTest.class,
SuitTwoTest.class})
public class SuitTest {
}
我们将前两个测试类添加进来,一并测试,然后选中SuiteClasses右键-选择Run SuitTest进行运行,结果为:
从结果中可以看出来两个测试类都跑了。这个功能比较适合多个测试类同时运行的情况,有的时候我们的测试类测试相应的类的功能,多个测试类一同测试,就可以不用每个单独跑一遍,减少时间。
最后
还有一些其他的高级用法,这里就不做过多的介绍了,文章的结尾会给出参考链接。我也是参考这些文章来学习的,非常感谢提供资料的作者。
这里JUnit测试基本就告一段落了,文中介绍了一些简单的用法,因为个人能力有限吧,在这里希望大家能把测试应用到项目中或者经常使用,这样才有意义。
其他用法: Junit - Android测试之旅(二)
参考:http://wiki.jikexueyuan.com/project/junit/
源码地址