Juint 单元测试(2)

单元测试(junit testing),是指对软件中的最小可测试单元进行检查和验证。Java里单元指一个类。

JUnit ,是一个开源的Java单元测试框架,是 Java的标准单元测试库,是非常重要第三方 Java 库,由 Kent Beck 和 Erich Gamma 开发。

Junit作为一个软件测试的工具,JUnit可以不破坏java原代码,使用方便,添加快捷,代码量少,可视化的测试。

JUnit单元测试步骤:

1.导入包junit测试包:JUnit测试版本,3.81版,4.0版,导入对应的jar包;

2.写一个类扩展(继承)TestCase;
3.在需要测试的方法名前加test生成新的测试方法;
4.运行测试,用断言(assert***)的方法测试成功(显示绿色)或失败(显示红色),或者自己判断结果正确与否。

 Unit3.81与JUnit4.0区别:
1.在 JUnit 4 中,测试是由 @Test 注释来识别的;
2.Unit 3.81 测试运行程序时会在运行每个测试之前自动调用 setUp() 方法,在JUnit4.0中,要用 @Before 注释;
3.在 JUnit 3.81 中,测试运行程序时会在运行每个测试之前自动使用 tearDown() 方法清除消耗的资源,在JUnit4.0中,用 @After 注释。

注意:如果需测试的方法没有返回值,只能测试其过程。

 JUnit4新特性:
1.属于类范围的 setUp()方法 和 tearDown() 方法,任何用 @BeforeClass 注释的方法都将在该类中的测试方法运行之前运行一次,而任何用 @AfterClass 注释的方法都将在该类中的所有测试都运行之后运行一次;
2.异常测试:编写抛出异常的代码,并使用注释来声明该异常是预期的;
3.在需要高效率的测试中,有些代码测试你认为可以跳过,这类测试可以被注释为 @Ignore

4.时间测试可以用超时参数来注释,如果测试的运行时间超过指定的毫秒数,测试失败。 

5.增加两个新的断言方法:

(1)public static void assertEquals(Object[] expected, Object[] actual)
(2)public static void assertEquals(String message, Object[] expected, Object[] actual) 这两个方法用来比较数组:如果数组长度相等且对应的元素相同,则这两个数组相等,否则不等,也考虑了数组为空的情况。

首先创建一个Java工程,在工程中创建一个被单元测试的Student数据类

 1 package com.phicomme.hu;  
 2   
 3 public class Student  
 4 {  
 5   
 6     private String name;  
 7     private String sex;  
 8     private int high;  
 9     private int age;  
10     private String school;  
11       
12     public Student(String name, String sex ,int high, int age, String school)  
13     {  
14         this.name = name;  
15         this.sex = sex;  
16         this.high = high;  
17         this.age = age;  
18         this.school = school;  
19     }  
20     public String getName()  
21     {  
22         return name;  
23     }  
24     public void setName(String name)  
25     {  
26         this.name = name;  
27     }  
28     public String getSex()  
29     {  
30         return sex;  
31     }  
32     public void setSex(String sex)  
33     {  
34         this.sex = sex;  
35     }  
36     public int getHigh()  
37     {  
38         return high;  
39     }  
40     public void setHigh(int high)  
41     {  
42         this.high = high;  
43     }  
44     public int getAge()  
45     {  
46         return age;  
47     }  
48     public boolean setAge(int age)  
49     {  
50         if (age >25)  
51         {  
52             return false;  
53         }  
54         else  
55         {  
56             this.age = age;  
57             return true;  
58         }                 
59     }  
60       
61   
62     public String getSchool()  
63     {  
64         return school;  
65     }  
66     public void setSchool(String school)  
67     {  
68         this.school = school;  
69     }  
70       
71 }  
示例

在eclipse下单元测试这个类:  

首先导入Junit包:选中java工程,点击鼠标右键--->选择properties---->在窗口中选Java Build Path---->在右侧点击Add Library---->在弹出的窗口列表中选中Junit---->下一步----->Junit 4(我用的是Junit 4)---->finish

这样Junit 4包就导完了,接下来就是创建测试类:

将测试类和被测试类放在不同的包中(也可以放在同一个包中,此处只是为了区别),代码如下:

测试类1:

 1 package com.phicomme.test;  
 2   
 3 import com.phicomme.hu.Student;  
 4   
 5 import junit.framework.TestCase;  
 6   
 7 public class StudentTest01 extends TestCase  
 8 {  
 9   
10     Student testStudent;  
11     //此方法在执行每一个测试方法之前(测试用例)之前调用  
12     @Override  
13     protected void setUp() throws Exception  
14     {  
15         // TODO Auto-generated method stub  
16         super.setUp();  
17         testStudent = new Student("djm", "boy", 178, 24, "华东政法");  
18         System.out.println("setUp()");  
19     }  
20   
21     //此方法在执行每一个测试方法之后调用  
22     @Override  
23     protected void tearDown() throws Exception  
24     {  
25         // TODO Auto-generated method stub  
26         super.tearDown();  
27         System.out.println("tearDown()");  
28     }  
29   
30     //测试用例,测试Person对象的getSex()方法  
31     public void testGetSex()  
32     {  
33         assertEquals("boy", testStudent.getSex());  
34         System.out.println("testGetSex()");  
35     }  
36       
37     //测试Person对象的getAge()方法  
38     public void testGetAge()  
39     {  
40         assertEquals(24, testStudent.getAge());  
41         System.out.println("testGetAge()");  
42     }  
43 }  
示例

测试类2:

 1 package com.phicomme.test;  
 2   
 3 import junit.framework.TestCase;  
 4   
 5 import com.phicomme.hu.Student;  
 6   
 7 public class StudentTest extends TestCase  
 8 {  
 9   
10     private Student testStudent;  
11       
12     @Override  
13     protected void setUp() throws Exception  
14     {  
15         // TODO Auto-generated method stub  
16         super.setUp();  
17         testStudent = new Student("steven_hu", "boy", 170 , 23, "上海理工");  
18     }  
19   
20     @Override  
21     protected void tearDown() throws Exception  
22     {  
23         // TODO Auto-generated method stub  
24         super.tearDown();  
25     }  
26   
27     public void testSetage()  
28     {  
29         assertTrue(testStudent.setAge(21));  
30     }  
31       
32     public void testGetSchool()  
33     {  
34         //预期值和实际值不一样,测试时出现失败(Failure)  
35         assertEquals("南昌大学", testStudent.getSchool());  
36     }  
37       
38     public void testGetName()  
39     {  
40         assertEquals("hdy", testStudent.getName());  
41     }  
42 }  
示例

当然,如果同时需要一起测试以上这两个测试类,可以通过TestSuite类实现,它相当于是一个套件,可以把所有测试类添进来一起运行测试。

 1 package com.phicomme.test;  
 2   
 3 import com.phicomme.hu.StudentTest02;  
 4   
 5 import junit.framework.Test;  
 6 import junit.framework.TestSuite;  
 7   
 8 public class AllTest  
 9 {  
10   
11     //static PersonTest p = new PersonTest();  
12     //static PersonTest p1 = new PersonTest();  
13     public static Test suite()  
14     {  
15         TestSuite suite = new TestSuite("Test for com.phicomme.test");  
16         //suite.addTest(p);  
17         //suite.addTest(p1);  
18         suite.addTestSuite(StudentTest.class);  
19         suite.addTestSuite(StudentTest01.class);  
20         return suite;  
21           
22     }  
23 }  
示例

最后,分别测试以上三个类(选中需要测试的类---->鼠标右键---->Run As---->Junit Test):

StudentTest类的测试结果图:

StudentTest01类的测试结果图:

AllTest类的测试结果图:

原文地址:https://www.cnblogs.com/yang82/p/7003527.html