什么是Junit?
Junit是xUnit的一个子集,在c++,paython,java语言中测试框架的名字都不相同
xUnit是一套基于测试驱动开发的测试框架
其中的断言机制:将程序预期的结果与程序运行的最终结果进行比对,确保对结果的可预知性
java所用的测试工具是Junit,Junit不需要去网上下载,在ecliplse中有:
1.新建一个工程
2.工程右键,点击Properties
3.
4.
5.
6.
7.
这是使用Junit最先要完成的 在完成了这个就进入下一步吧!
来简单使用一下Junit!
新建一个类:Calculate
package com.fulisha.textjunit;
public class Calculate {
public int add(int a,int b){
return a+b;
}
public int substract(int a , int b){
return a-b;
}
public int cheng(int a,int b){
return a*b;
}
public int chu(int a, int b){
return a/b;
}
}
再新建一个测试类
package com.fulisha.textjunit;
import static org.junit.Assert.*;
import org.junit.Test;
public class CalculateTest {
@Test
public void testAdd(){
assertEquals(6,new Calculate().add(3, 3));
}
@Test
public void testsubstract(){
assertEquals(2,new Calculate().substract(5, 3));
}
@Test
public void testcheng(){
assertEquals(15,new Calculate().cheng(5, 3));
}
@Test
public void testchu(){
assertEquals(2,new Calculate().chu(6, 3));
}
}
测试后的结果:
对此进行总结:
1.测试方法上必须使用@Test
2.测试方法必须使用 public void进行修饰
3.新建一个源代码目录来存放测试代码
4.测试类的包应该和被测试类的包一样
5.测试单元中的每个方法一定要能够独立测试,其方法不能有任何依赖
如果,测试的方法多,不想一个个的建立测试方法那么:
1.选择要测试的方法,右击New 选择other
2.
3.
4.
5.
6.
7.创建结果
package com.fulisha.textjunit;
import static org.junit.Assert.*;
import org.junit.Test;
public class CalculateTest3 {
@Test
public void testAdd() {
fail("Not yet implemented");
}
@Test
public void testSubstract() {
fail("Not yet implemented");
}
@Test
public void testCheng() {
fail("Not yet implemented");
}
@Test
public void testChu() {
fail("Not yet implemented");
}
}
再在这个基础上进行修改测试类方法
在测试中结果中关于Failure和error的解释
1.Failure 一般由测试单元使用断言方法判断失败引起的,这个报错,说明测试点发现了问题,即程序输出的结果和我们预期的不一样
2.error 是由代码异常引起的,它可以产生代码本身的错误,也可以是测试代码中的一个隐藏bug
!!!测试用例不是用来证明你是对的,而是用来证明你没错
关于Junit运行流程
package com.fulisha.textjunit;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class JunitFlowText {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("this is beforeClasss....");
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("this is afterClasss....");
}
@Before
public void setUp() throws Exception {
System.out.println("this is brfore....");
}
@After
public void tearDown() throws Exception {
System.out.println("this is after....");
}
@Test
public void test1() {
System.out.println("this is test1....");
}
@Test
public void test2() {
System.out.println("this is test2....");
}
}
运行结果:
总结:
@BeforeClass
修饰的方法会在所有方法被调用前执行,且该方法时静态的,所以当测试类被加载后就接着运行它,而且在内存中他只会存在一份实例,他比较适合加载配置文件(针对所有测试,只执行一次 )
@AfterClass
所修饰的方法通常用来对资源管理,如关闭数据库连接(针对所有测试,只执行一次 )
@Before和@After 会在每个测试方法前后各执行一次
@Test:测试方法,在这里可以测试期望异常和超时时间
@Ignore:忽略的测试方法