MyEclipse使用Junit
2011年05月08日
[b]JUnit[/b][b]是由 Erich Gamma [/b][b]和 Kent Beck [/b][b]编写的一个回归测试框架(regression testing framework[/b][b])。Junit[/b][b]测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How[/b][b])完成功能和完成什么样(What[/b][b])的功能。Junit[/b][b]是一套框架,继承TestCase[/b][b]类,就可以用Junit[/b][b]进行自动测试了。[/b]
[b]回归测试:当软件发生变化时,重新测试现有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有的正常功能。 [/b]
一.准备工作
1. 创建Junit测试工程
2. 导入Junit..jar包
3. 导入被测接口API Jar包
4. 创建test文件目录(存放测试类)(一般命名为test)
5. 在test目录下创建com.junit.test包
6. 在com.junit.test包中创建测试类(一般命名规则:被测试类名+Test,例如:CreateInfoTest)继承junit.framework.Testcase类
7. 导入需要的包后,开始编写测试方法(方法名称必须以test+用例方法名称)
举例:
[b]被测试类[/b]:
public class CreateInfo
{
public CreateInfo()
{
Super();
}
//被测试方法1
public static String Say(String words)
{
return words;
}
//被测试方法2
public static int Cal(int a,int b)
{
return a*b;
}
}
[b]编写测试类方法一:[/b]
import junit.framework.*;
import junit.testui.TestRunner;
public Class CreateinfoTest extends TestCase//需要继承TestCase类
{
public CreateinfoTest(String name)
{
Super(name);
}
//测试被测方法1
public void testSay()/[b]/test+[/b][b]被测方法名[/b]
{
assertEquals(“学习Junit”, CreateInfo.Say(“学习Junit”));
}
//测试被测方法2
public void testCal()//[b]测试方法命名必须符合规范,test+[/b][b]被测试方法名[/b]
{
assertEquals(50, CreateInfo.Cal(5,10));/[b]/Assert[/b][b]断言,断言就是针对测试目标做出一个是或者否的结论。Org.junit.Assert[/b][b]类是一系列断言方法的集合[/b]
}
//main方法执行测试方法
public static void main(String[] args)
{
TestRunner.run(CreateinfoTest.class);//执行此测试类中所有的测试方法
}
}
备注:
执行main方法后控制台会出现:
结果1:
[b]..[/b]
[b]Time:0[/b]
[b]OK (2 tests)[/b]
[b]或者会出现结果2[/b][b]:[/b]
[b]..F[/b]
[b]Time:0[/b]
[b]There was 1 failure[/b]
[b] [/b]
[b]JUnit[/b][b]报告测试没有成功,区分为失败(failures[/b][b])和错误(errors[/b][b])。失败是你的代码中的Assert[/b][b]方法失败引起的;而错误则是代码异常引起 [/b][b][/b]
[b] [/b]
[b]注解:[/b]
[b]Time[/b][b]上的小点表示测试的个数,如果测试通过则显示ok. [/b][b]否则在小点后边标上F,[/b][b]表示该测试失败。[/b]
[b]综上所述:编写测试类的基本步骤[/b]
[b](1) [/b][b]扩展TestCase[/b][b]类[/b]
[b](2) [/b][b]覆盖runTest()[/b][b]方法。(可选)[/b]
[b](3) [/b][b]写一些testXXXXX()[/b][b]方法[/b]
[b] [/b]
[b]编写测试类方法二:[/b]
Junit4注解的使用。(Junit最新jar包)
@BeforeClass :所有测试开始之前被系统运行,只运行一次
@AfterClasss:所有测试结束之后被系统调用,只运行一次
@Before:每个测试方法执行之前运行,有多少个测试方法就被运行多少次[b].[/b][b]必须是static[/b][b]的[/b]
@After: 每个测试方法执行结束后运行,有多少个测试方法就被运行多少次[b].[/b][b]必须是static[/b][b]的[/b]
@lgone:被忽略的测试方法
@Test:测试方法,即是一个测试用例
例子:[b]Junit4[/b][b]注解式测试方法示例(测试类不用继承Testcase[/b][b])[/b]
[b]Package com.junit.test;//[/b][b]测试类存放的包[/b]
[b]import static org.junit.Assert.*;[/b]
[b]import static org.hamcrest.Matchers.*;[/b]
[b]import org.junit.*;[/b]
public class Createinfo2Test //没有继承Test类
{
@BeforClass
public static void beforeClass()
{
System.out.println(“开始执行所有测试用例。。。。。”);
}
@AfterClass
Public static void afterClass()
{
System.out.println(“所有测试用例执行完毕。。。”);
}
@Before
public void before()
{
System.out.println(“执行一个测试方法开始。”);
}
@After
public static after()
{
System.out.println(“执行一个测试方法结束”);
}
//测试被测方法1
@Test(timeout=60000)//[b]可选参数timeout[/b][b]用来指定限时测试[/b]
public void testSay()//test+被测方法名
{
assertEquals(“学习Junit”, CreateInfo.Say(“学习Junit”));
}
//测试被测方法2
@Test(excepted=Exception.class) //[b]可选参数excepted[/b][b]用于测试一个预期的异常//(excepted=java.lang.NullException , timeout=1000)[/b]
public void testCal()//测试方法命名必须符合规范,test+被测试方法名
{
assertEquals(50, CreateInfo.Cal(5,10));
}
@Ignore(“还未编写好”)//忽略此测试方法testAdd 原因为: 还未编写好
@Test
public void testAdd()
{
}
}
//[b]右键Run As>>Junit Test [/b][b]执行测试用例方法[/b]
[b] [/b]
[b]强调:有多个测试方法类的时候可使用测试套件(TestSuit) //[/b][b]测试套件:多个测试的组合;[/b]
[b]具体介绍:[/b]
[b](1[/b][b])Suite[/b][b]类:套件运行器,负责运行测试套件(TestSuit[/b][b])[/b]
[b]使用套件运行器的方法:@Runwith(Suite.class).[/b]
[b]使用Suite.SuiteClasses[/b][b]注释来创建测试套件[/b]
[b](2[/b][b])JunitCore[/b][b]类:直接担负起运行测试的具体工作[/b]
[b]首先需要创建其实例对象[/b]
[b]JunitCore core=new JunitCore();[/b]
[b]然后可运行具体的测试类了[/b]
[b]Core.run([/b]CreateinfoTest .class[b]);[/b]
[b](3)Result[/b][b]类是一个收集器。可以收集测试结果的概要信息。[/b]
[b]方法名[/b]
[b]方法名说明[/b]
[b]Int getFaliureCount()[/b]
[b]测试失败的数目[/b]
[b]List getFaliures()[/b]
[b]测试失败的描述[/b]
[b]Int getIgnoreCount()[/b]
[b]忽略的测试数[/b]
[b]int getRunCount()[/b]
[b]测试总数[/b]
[b]Long getRunTime()[/b]
[b]测试运行时间([/b][b]毫秒)[/b]
[b]Boolean wasSuccessful()[/b]
[b]如果全部测试成功则为true[/b]
[b] [/b]
[b]例子:[/b]
[b]新建测试套件类[/b]
[b] [/b]
[b]Impore org.junit.runner.runwith;[/b]
[b]Import org.junit.runners.Suite;[/b]
[b]@RunWith(Suite.class)[/b]
[b]@Suite.SuiteClasses({[/b]Createinfo2Test .class, CreateinfoTest.class [b]})[/b]
[b]public class AllTests()[/b]
[b]{[/b]
[b]}[/b]
[b] [/b]
[b]新建执行测试套件类[/b]
[b] [/b]
[b]Import org.junit.runner.JunitCore;[/b]
[b] [/b]
[b]public class JuniteCoreTest()[/b]
[b]{[/b]
[b]JunitCore core=new JunitCore();//[/b][b]创建执行器实例[/b]
[b]core.run(AllTests.class);//[/b][b]执行测试套件(执行测试套件注明的类)[/b]
[b]core.run([/b]CreateinfoTest.class[b]);//[/b][b]直接运行测试类[/b]
[b] [/b]
[b]}[/b]
[b] [/b]
[b]新建收集测试结果类[/b]
[b] [/b]
[b]Import org.junit.runner.JunitCore;[/b]
[b]Import org.junit.runner.Result;[/b]
[b] [/b]
[b]Public class TestResult[/b]
[b]{[/b]
[b] [/b]
[b] JunitCore core=new JunitCore();//[/b][b]创建执行器实例[/b]
[b]//[/b][b]收集测试结果信息[/b]
[b]Result re= core.run(AllTests.class);//[/b][b]注明收集哪些测试类的结果[/b]
[b]System.out.println(“[/b][b]测试总数”+re.getRunCount());[/b]
[b] [/b]
[b]}[/b]
[b]至此Junit[/b][b]的使用介绍完毕[/b]
[b] [/b][b]张斌 2011-5-8[/b]
2011年05月08日
[b]JUnit[/b][b]是由 Erich Gamma [/b][b]和 Kent Beck [/b][b]编写的一个回归测试框架(regression testing framework[/b][b])。Junit[/b][b]测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How[/b][b])完成功能和完成什么样(What[/b][b])的功能。Junit[/b][b]是一套框架,继承TestCase[/b][b]类,就可以用Junit[/b][b]进行自动测试了。[/b]
[b]回归测试:当软件发生变化时,重新测试现有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有的正常功能。 [/b]
一.准备工作
1. 创建Junit测试工程
2. 导入Junit..jar包
3. 导入被测接口API Jar包
4. 创建test文件目录(存放测试类)(一般命名为test)
5. 在test目录下创建com.junit.test包
6. 在com.junit.test包中创建测试类(一般命名规则:被测试类名+Test,例如:CreateInfoTest)继承junit.framework.Testcase类
7. 导入需要的包后,开始编写测试方法(方法名称必须以test+用例方法名称)
举例:
[b]被测试类[/b]:
public class CreateInfo
{
public CreateInfo()
{
Super();
}
//被测试方法1
public static String Say(String words)
{
return words;
}
//被测试方法2
public static int Cal(int a,int b)
{
return a*b;
}
}
[b]编写测试类方法一:[/b]
import junit.framework.*;
import junit.testui.TestRunner;
public Class CreateinfoTest extends TestCase//需要继承TestCase类
{
public CreateinfoTest(String name)
{
Super(name);
}
//测试被测方法1
public void testSay()/[b]/test+[/b][b]被测方法名[/b]
{
assertEquals(“学习Junit”, CreateInfo.Say(“学习Junit”));
}
//测试被测方法2
public void testCal()//[b]测试方法命名必须符合规范,test+[/b][b]被测试方法名[/b]
{
assertEquals(50, CreateInfo.Cal(5,10));/[b]/Assert[/b][b]断言,断言就是针对测试目标做出一个是或者否的结论。Org.junit.Assert[/b][b]类是一系列断言方法的集合[/b]
}
//main方法执行测试方法
public static void main(String[] args)
{
TestRunner.run(CreateinfoTest.class);//执行此测试类中所有的测试方法
}
}
备注:
执行main方法后控制台会出现:
结果1:
[b]..[/b]
[b]Time:0[/b]
[b]OK (2 tests)[/b]
[b]或者会出现结果2[/b][b]:[/b]
[b]..F[/b]
[b]Time:0[/b]
[b]There was 1 failure[/b]
[b] [/b]
[b]JUnit[/b][b]报告测试没有成功,区分为失败(failures[/b][b])和错误(errors[/b][b])。失败是你的代码中的Assert[/b][b]方法失败引起的;而错误则是代码异常引起 [/b][b][/b]
[b] [/b]
[b]注解:[/b]
[b]Time[/b][b]上的小点表示测试的个数,如果测试通过则显示ok. [/b][b]否则在小点后边标上F,[/b][b]表示该测试失败。[/b]
[b]综上所述:编写测试类的基本步骤[/b]
[b](1) [/b][b]扩展TestCase[/b][b]类[/b]
[b](2) [/b][b]覆盖runTest()[/b][b]方法。(可选)[/b]
[b](3) [/b][b]写一些testXXXXX()[/b][b]方法[/b]
[b] [/b]
[b]编写测试类方法二:[/b]
Junit4注解的使用。(Junit最新jar包)
@BeforeClass :所有测试开始之前被系统运行,只运行一次
@AfterClasss:所有测试结束之后被系统调用,只运行一次
@Before:每个测试方法执行之前运行,有多少个测试方法就被运行多少次[b].[/b][b]必须是static[/b][b]的[/b]
@After: 每个测试方法执行结束后运行,有多少个测试方法就被运行多少次[b].[/b][b]必须是static[/b][b]的[/b]
@lgone:被忽略的测试方法
@Test:测试方法,即是一个测试用例
例子:[b]Junit4[/b][b]注解式测试方法示例(测试类不用继承Testcase[/b][b])[/b]
[b]Package com.junit.test;//[/b][b]测试类存放的包[/b]
[b]import static org.junit.Assert.*;[/b]
[b]import static org.hamcrest.Matchers.*;[/b]
[b]import org.junit.*;[/b]
public class Createinfo2Test //没有继承Test类
{
@BeforClass
public static void beforeClass()
{
System.out.println(“开始执行所有测试用例。。。。。”);
}
@AfterClass
Public static void afterClass()
{
System.out.println(“所有测试用例执行完毕。。。”);
}
@Before
public void before()
{
System.out.println(“执行一个测试方法开始。”);
}
@After
public static after()
{
System.out.println(“执行一个测试方法结束”);
}
//测试被测方法1
@Test(timeout=60000)//[b]可选参数timeout[/b][b]用来指定限时测试[/b]
public void testSay()//test+被测方法名
{
assertEquals(“学习Junit”, CreateInfo.Say(“学习Junit”));
}
//测试被测方法2
@Test(excepted=Exception.class) //[b]可选参数excepted[/b][b]用于测试一个预期的异常//(excepted=java.lang.NullException , timeout=1000)[/b]
public void testCal()//测试方法命名必须符合规范,test+被测试方法名
{
assertEquals(50, CreateInfo.Cal(5,10));
}
@Ignore(“还未编写好”)//忽略此测试方法testAdd 原因为: 还未编写好
@Test
public void testAdd()
{
}
}
//[b]右键Run As>>Junit Test [/b][b]执行测试用例方法[/b]
[b] [/b]
[b]强调:有多个测试方法类的时候可使用测试套件(TestSuit) //[/b][b]测试套件:多个测试的组合;[/b]
[b]具体介绍:[/b]
[b](1[/b][b])Suite[/b][b]类:套件运行器,负责运行测试套件(TestSuit[/b][b])[/b]
[b]使用套件运行器的方法:@Runwith(Suite.class).[/b]
[b]使用Suite.SuiteClasses[/b][b]注释来创建测试套件[/b]
[b](2[/b][b])JunitCore[/b][b]类:直接担负起运行测试的具体工作[/b]
[b]首先需要创建其实例对象[/b]
[b]JunitCore core=new JunitCore();[/b]
[b]然后可运行具体的测试类了[/b]
[b]Core.run([/b]CreateinfoTest .class[b]);[/b]
[b](3)Result[/b][b]类是一个收集器。可以收集测试结果的概要信息。[/b]
[b]方法名[/b]
[b]方法名说明[/b]
[b]Int getFaliureCount()[/b]
[b]测试失败的数目[/b]
[b]List getFaliures()[/b]
[b]测试失败的描述[/b]
[b]Int getIgnoreCount()[/b]
[b]忽略的测试数[/b]
[b]int getRunCount()[/b]
[b]测试总数[/b]
[b]Long getRunTime()[/b]
[b]测试运行时间([/b][b]毫秒)[/b]
[b]Boolean wasSuccessful()[/b]
[b]如果全部测试成功则为true[/b]
[b] [/b]
[b]例子:[/b]
[b]新建测试套件类[/b]
[b] [/b]
[b]Impore org.junit.runner.runwith;[/b]
[b]Import org.junit.runners.Suite;[/b]
[b]@RunWith(Suite.class)[/b]
[b]@Suite.SuiteClasses({[/b]Createinfo2Test .class, CreateinfoTest.class [b]})[/b]
[b]public class AllTests()[/b]
[b]{[/b]
[b]}[/b]
[b] [/b]
[b]新建执行测试套件类[/b]
[b] [/b]
[b]Import org.junit.runner.JunitCore;[/b]
[b] [/b]
[b]public class JuniteCoreTest()[/b]
[b]{[/b]
[b]JunitCore core=new JunitCore();//[/b][b]创建执行器实例[/b]
[b]core.run(AllTests.class);//[/b][b]执行测试套件(执行测试套件注明的类)[/b]
[b]core.run([/b]CreateinfoTest.class[b]);//[/b][b]直接运行测试类[/b]
[b] [/b]
[b]}[/b]
[b] [/b]
[b]新建收集测试结果类[/b]
[b] [/b]
[b]Import org.junit.runner.JunitCore;[/b]
[b]Import org.junit.runner.Result;[/b]
[b] [/b]
[b]Public class TestResult[/b]
[b]{[/b]
[b] [/b]
[b] JunitCore core=new JunitCore();//[/b][b]创建执行器实例[/b]
[b]//[/b][b]收集测试结果信息[/b]
[b]Result re= core.run(AllTests.class);//[/b][b]注明收集哪些测试类的结果[/b]
[b]System.out.println(“[/b][b]测试总数”+re.getRunCount());[/b]
[b] [/b]
[b]}[/b]
[b]至此Junit[/b][b]的使用介绍完毕[/b]
[b] [/b][b]张斌 2011-5-8[/b]