zoukankan      html  css  js  c++  java
  • 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类的测试结果图:

  • 相关阅读:
    .Net开发笔记(二十一) 反射在.net中的应用
    .Net开发笔记(二十)创建一个需要授权的第三方组件
    .Net开发笔记(十九) 创建一个可以可视化设计的对象
    .net开发笔记(十八) winform中的等待框
    .Net开发笔记(十七) 应用程序扩展
    java连接https时禁用证书验证.
    How to disable SSL certificate checking with Spring RestTemplate?(使用resttemplate访问https时禁用证书检查)
    webpack打包调试react并使用babel编译jsx配置方法
    动态改变spring定时任务执行频率
    在java代码中,用xslt处理xml文件
  • 原文地址:https://www.cnblogs.com/yang82/p/7003527.html
Copyright © 2011-2022 走看看