Junit单元测试入门(主要是Junit4)
一、引入Junit4
在项目pom.xml文件中加入截图内容
pom文件加入配置二、基本fixture:Junit基本注解功能的使用
1、@BeforeClass // 表示在类中的任意public static void方法执行之前执行,在类中只运行一次,必须声明成public static
2、@AfterClass //表示在类中的任意public static void方法执行之后执行,在类中只运行一次,必须声明成public static
3、@Before //表示在任意使用@Test注解标注的public void方法执行之前执行,在每个测试方法之前都会运行一次,只需声明成public
@before常常配合public void setUp() throws Exception { }方法使用,可用来初始化数据,在所有类执行之前,初始化所有为某一个状态(比如说计算器方法,每个方法执行前都置为0)
4、@After //表示在任意使用@Test注解标注的public void方法执行之后执行,在每个测试方法之前都会运行一次,只需声明成public
5、@Test //使用该注解标注的public void方法,表示为一个测试方法。这是最常用的
6、@Ignore("not ready yet")//表示该方法尚未完成,执行的时候忽略该方法
测试代码三、高级fixture
1、限时测试(@Test(timeout=1000))......表示超过这个时间(1s)后,该测试方法会被强行终止,且系统会告知你错误的原因的超时引起的。这个方法可以解决死循环的问题
2、异常测试(@Test(expected = ArithmeticException. class ))前面的exception需要自行根据实际情况写具体的异常。改注解可以检测程序是否抛出了我们指定的异常。意义在于,程序进行异常处理的时候,你觉得此处应该抛出异常,但是却没有抛出,也是是bug。不过我想像类似于被除数不能为0的这种情况,其实自己做个if-else判断最靠谱。
3、Runner(运行器) RunWith()
JUnit 中有一个默认 Runner ,如果你没有指定,那么系统自动使用默认 Runner 来运行你的代码。当然你也可以指定一个Runner来执行你的程序。下面两个是等价的
import org.junit.runner.RunWith;
public class test1(){ }
@RunWith(TestClassRunner. class )
//TestClassRunner需要导入这个类相关的jar包,然而至今我没有找到。。。
public class test2(){ }
4、参数化测试:@RunWith(Parameterized. class )
同一个方法/同一个函数,可能结果有多种情况,如果一个个情况分开写就会比较麻烦,使用参数之后,我们就可以把多个测试用例的数据参数化起来,把参数传进去,一起执行。
比如某个函数:这个函数需要测试3中情况,正数、0、负数
除法函数那我们的参数需要两个,一个是n,另一个是result。
private int param;
private int result;
然后定义一个函数,把参数以及结果传进去
定义函数,传入参数和结果// 构造函数,对变量进行初始化
构造函数接下来,就可以正常测试了
测试函数执行输出结果:
测试结果5、打包测试:@RunWith(Suite.class )
当你需要一次性把所有的单元测试集中在一起执行,或者进行每日构建的时候,你需要用到这个打包测试的功能。比如下面有两个分开的测试类:
public class test1{
@Test
public void test1(){
mytest1.......}
}
public class test2{
@Test
public void test2(){
mytest2.......}
}
那么,我们可以这样,就可以一下子执行两个测试:需要新建一个类,把需要一起执行的测试类当做参数,这个新类的内容不重要,空的也行
@RunWith(suite.class)
@Suite.SuiteClasses({test1.class,test2.class})
public class Suite Test {
System.out.println(“执行完毕”);
}