JUnit
JUnit注解详解
@Test
在方法前加上@Test,定义为一个测试方法
测试方法必须是 public void 即公共,无返回值的,可抛出异常
@Test
public void add() {
example test = new example();
assertEquals(5,test.add(1,4));
}
@Ignore
暂时不运行某些测试方法/测试类,在测试方法前加上@Ignore注解,JUnit会统计Ignore次数
@Ignore
@Test
public void add() {
example test = new example();
assertEquals(5,test.add(1,4));
}
@BeforeClass
在运行几个测试方法时,可能需要在数据准备或其他准备中执行一些相同命令,此时为了代码更加清晰,更少冗余,可以将公用部分提取出来放在一个方法中,并注解@BeforeClass,在所有测试方法运行前先运行一次这个方法,例如创建数据库,读取文件等,该方法必须是public static void,即公共静态且无返回值
@BeforeClass
public static void aaa(){
System.out.println("test begin");
}
@Before
与@BeforeClass区别,@Before会在每个用例运行之前先运行一遍,主要用于一些独立用例之前的准备工作,比如两个用例都需要读取数据库里用户A的信息,用例1读完后删除A的信息,而用例2读完后会修改A的信息,此时我们可以在@BeforeClass里建立数据库连接,在@Before里插入一条用户A的信息用以测试。
@Before
public void beforeTest(){
System.out.println("test begin");
}
注:与上面的区别是此时根据用例数量输出了多行test begin
@After
与@Before对应
@RunWith()
概念:测试方法,测试类,测试集,测试运行器
测试方法:用@Test注解的一些方法
测试类:包含一个或多个测试方法的Test.java文件
测试集,是一个suite,包含多个测试类
测试运行器:决定运行方法偏好来运行测试方法/类/集
@RunWith()放在测试类名之前运行,用以确定运行方法,若不标注则会使用默认运行器
常见运行器:
1.@RunWith(Parameterized.class)
参数化运行器,配合@Parameter使用参数化功能
2.@RunWith(Suite.class)
@SuiteClasses({ATest.class,BTest.class,CTest.class})
测试集运行器配合使用测试集功能
3.@RunWith(JUnit4.class)
使用JUnit4默认运行器
4.@RunWith(JUnit38ClassRunner.class)
用于兼容JUnit3.8运行器
5.其他运行器功能
@RunWith(SpringJUnit4ClassRunner.class)
集成了Spring的一些功能
@RunWith(JUnit4.class)
@Parameter
用于使用参数化功能
限时测试
@Test(timeout = 1000)
测试逻辑复杂,嵌套较深的程序时,易出现死循环,故需要加入一些测试限定措施,限时测试规定了一个测试执行时间,若超过了测试规定的执行时间就会被系统强行终止,并且系统会汇报结束的原因为超时。在@Test注解中加入一个参数即可(@Test(timeout=1000)),单位为毫秒
@Test(timeout = 1000)
测试异常
@Test(expected = ArithmeticException.class)
@Test标注加上此参数,当代码无异常时也会抛出异常
@Test(expected = ArithmeticException.class)
自定义@MyTest注解并实现单元测试
目的
完成自定义注解@MyTest 并实现标有注解的方法并启动他(模拟@Test注解做单元测试)
步骤
1.新建一个注解类cannotation 命名为MyTest
2.创建一个TestJUnit单元测试类,写入几个方法,例如public void test();
3.创建一个MyTestDemo测试类(主功能实现类),该类利用反射机制来实现TestJUnit单元测试类中加@MyTest注解方法的启动
4.给予注解类生命周期与反射机制吻合,也就是定义注解可以保留到运行时,通过反射机制以获取注解信息
5.编写MyTestDemo测试类,利用反射机制获取TestJUnit单元测试类的所有方法对象,并获取单元测试类中所有方法对象,遍历所有方法对象执行加有@MyTest注解的方法
6.启动测试类查看结果(执行结果在最后)
注意:自定义注解类没有编写注解体,即无默认value值,标识需要启动的方法。
注解类编译后也是.class文件
通过反射机制来完成自定义注解操作,一定要给与注解和反射相同的生命周期
不会自动生成run方法启动项