(减少时间、提升质量)
JUnit简介
什么是JUnit
是简单复用框架,是xUnit的子集(xUnit是一套基于测试驱动开发的测试框架)
首先下载jar包,在官网中下载junit.jar和hamcrest-core.jar
JUnit3中的所有方法都必须使用@Test注解
JUnit3需要在方法名前加test作为前缀
JUnit3必须继承junit.framework.TestCase类(JUnit4不需要)
为什么要使用JUnit
测试框架可以帮助我们有目的性的测试,能帮助我们最大限度上的避免代码出bug,并使程序达到预期的效果。
JUnit 使用 断言机制 将预期的结果 和 输出的结果进行比对
使用JUnit
在项目下add Libraries…加入JUnit
然后新建一个测试类,在当前包中new 一个 JUnit Test Case(会自动生成测试模板)
assertEquals(预期值,new 预期方法());
然后右键–Run As–JUnit Test
junit2实践
1.测试方法必须使用@Test进行修饰
2.测试方法必须使用public void 进行修饰,不能带任何的参数
3.新建一个源代码目录来存放我们的测试代码
4.测试类的包应该和被测试类保持一致
5.测试单元中的每个方法必须可以独立测试,测试方法间不能有任何依赖
6.测试类使用Test作为类名的后缀(不是必须的)
7.测试方法使用test作为方法名的前缀(不是必须的)
测试失败的两种结果
1.Fail(结果跟预期不一致)一般由单元测试使用的断言方法失败索导致的,这表示测试点发现了问题
2.Error(抛出异常) 它可以产生于测试代码本身的错误,也可以是被测试代码中的一个隐藏的bug
3.测试用例不是用来证明你是对的,而是用来证明你没有错。
JUnit运行流程
@BeforeClass
public static void setUpBeforeClass() throws Exception{}
@AfterClass
public static void tearDownAfterClass() throws Exception{}
@Before
public void setUp() throws Exception{}
@After
public void tearDown() throws Exception{}
@Test(模板)
public void test(){ fail("Not yet implemented!"); }
1.@BeforeClass 修饰的方法会在所有的方法被调用前执行,
而且该方法是静态的,所以当测试类被加载后接着就会运行它,
而且在内存中它只会存在一份实例,它比较适合加载配置文件
2.@AfterClass 所修饰的方法通常用来对资源的清理,如关闭数据库的连接
3.@Before 和 @After 会在每个测试方法的前后各执行一次。
JUnit常用注解
@Test 将一个普通的方法修饰成为一个测试方法
@BeforeClass 它会在所有的方法运行前被执行,static修饰
@AfterClass 它会在所有的方法运行结束后被执行,static修饰
@Before 会在每一个测试方法被运行前执行一次
@After 会在每一个测试方法运行后被执行一次
@Test(excpected=xxx.class)(预期抛出一个什么样的异常)
@Test(timeout = 毫秒) (在多少毫秒后结束该方法)
@Ignore:所修饰的测试方法会被测试运行器忽略,不会执行
@RunWith 可以更改测试运行器
测试套件的使用(套件测试类必须是空类)
@RunWith(Suite.class)
@Suite.SuiteClasses({TaskTesk1.class,TaskClass2.class,TaskClass3.class})
public class SuiteTest{
}
1.测试套间类就是组织测试类一起运行的
写一个作为测试套间的入口类,这个类里不包含其他的方法
更改测试运行器Suite.class
将要测试的类作为数组传入到Suite,SuiteClasses({})
junit4的参数化设置
@RunWit(Parameterized.class)
public class ParameterTest{
int expected = 0;
int input1 = 0;
int input2 = 0;
@Parameters
public static Collection<Object[]> t(){
return Array.asList(new Object[][]{
{3,1,2},
{4,2,2}
});
}
//构造函数
public ParameterTest(int expected,int input1,int input2){
this.expected = expected;
this.input1 = input1;
this.input2 = input2;
}
}
1.更改默认的测试运行器为RunWith(Parameterized.class)
2.声明变量来存放预期值和结果值
3.声明一个返回值为Collection的公共静态方法,并使用@Parameters进行修饰
4.为测试类声明一个带有参数的公共的构造函数,并在其中为之声明变量赋值