JUnit3的使用

简介:
简要说JUnit的4大功能 
1.  管理测试用例。修改了哪些代码,这些代码的修改会对哪些部分有影响,通过JUnit将这次的修改做个完整测试。这也就 JUnit中所谓的TestSuite。 
2.  定义测试代码。这也就是 JUnit中所谓的TestCase,根据源代码的测试需要定义每个TestCase,并将TestCase添加到相应的TestSuite方便管理。 
3.  定义测试环境。在TestCase测试前会先调用“环境”配置,在测试中使用,当然也可以在测试用例中直接定义测试环境。 
4.  检测测试结果。对于每种正常、异常情况下的测试,运行结果是什么、结果是否是我们预期的等都需要有个明确的定义,JUnit在这方面提供了强大的功能。

      以上部分与我们平常使用IDE调试的过程是完全一样的,只不过是增加了测试用例管理、测试结果检测等功能,提高了单元的效率,保证了单元测试的完整性,明确了单元测试的目标。
 
一. 测试用例
package can.test;    

import java.util.ArrayList;    
import java.util.Collection;    
import junit.framework.TestCase;    

public  class SampleTest  extends TestCase {    

         protected  void setUp() {    
                 /* 开始test前的准备操作:初始化,获取数据连接... */    
                                 
        }    
                    
         protected  void tearDown() {    
                 /* 完成test后的清理工作:关闭文件, 关闭数据连接... */    
                                    
        }    
                    
         public  void testEmpty() {    
                 /* test case 1*/    
                Collection collection =  new ArrarList();    
                assertTrue(collection.isEmpty());    
        }    
                    
         public  void testCase2() {    
                 /* test case 2*/    
                ArrayList emptyList =  new ArrayList(); 
                 try { 
                        Object o = emptyList.get(0); 
                        fail( "Should raise an IndexOutOfBoundsException"); 
                }  catch (IndexOutOfBoundsException expected) { 
                        assertTrue( true); 
                } 
        }    
}

1. 当需要进行test前后操作,则对setUp(), tearDown()这两个方法进行重写。

 
2. 每进行一个test case前后,都会调用setUp(), tearDown()。注意,不是一次调用setUp(), 然后进行多个test case,最后才调用tearDown()。而且选择test case的次序是不确定的。所以调用次序可能是:
     1  setUp()
     2  testYYY()
     3  tearDown()
     4  setUp()
     5  testXXX()
     6  tearDown()
     所以每个testcase不要存在数据上的前后联系。
 
3. 编译&运行
    compile:  javac  -cp ../lib/junit.jar  can/junit/ SampleTest.java
    run:  (文本界面)   java  -cp    .;../lib/junit.jar  junit.textui.TestRunner  can.junit.SampleTest
      (图形界面)    java  -cp    .;../lib/junit.jar  junit.swingui.TestRunner  can.junit.SampleTest
 
     如果提示can.junit.SampleTest not found,则注意命令中红色处, .表示把当前目录添加到classpath,便于junit能够在该目录找到can.junit.SampleTest
 
4. 加上main(可选)
    如果你觉得每次都要在命令中指定文本界面或图形界面,有点麻烦,那可以添加一下代码到SampleTest类中:
import junit.framework.Test; 
import junit.framework.TestSuite; 


         public  static Test suite() { 
                 /* 添加SampleTest类到TestSuite*/ 
                 return  new TestSuite(SampleTest. class); 
        } 

         public  static  void main(String args[]) { 
                 /* 指定文本界面*/ 
                junit.textui.TestRunner.run(suite()); 
        }
 或者
         public  static  void main(String args[]) { 
                junit.textui.TestRunner.run(SampleTest. class); 
        }
    这样run: java  -cp  .;../lib/junit.jar    can.junit. SampleTest
 
二. 测试单元
      当需要对多个类或者模块进行unit test的时候,我们都会写好每个类的testcase,然后写一个Suite来将它们串联起来。
package can.junit; 

import junit.framework.Test; 
import junit.framework.TestSuite; 

public  class SampleTestSuite { 

         public  static Test suite() { 
                TestSuite suite =  new TestSuite( "Sample Tests"); 
                 
                 /* 逐一添加testCase类 */ 
                suite.addTestSuite(SampleTest. class); 
                 
                 /* 逐一添加test suite(注意,这是递归调用的) */ 
                suite.addTest(AnotherTestSuite.suite()); 

                 return suite; 
        } 

         public  static  void main(String args[]) { 
                junit.textui.TestRunner.run(suite()); 
        } 
}
 
刚才说了,每进行一个test case,setUp()和tearDown()都会调用。而有的时候,在setUp()中相当耗费资源,我们想进行所有的test case仅调用一次setUp()和tearDown(),这样需要把TestSuite包装到TestSetup类中:
import junit.framework.*;    
import junit.extensions.TestSetup;    

public  class AllTestsOneTimeSetup {    

         public  static Test suite() {    
            
                TestSuite suite =  new TestSuite();    
                suite.addTest(SomeTest.suite());    
                suite.addTest(AnotherTest.suite());    

                TestSetup wrapper =  new TestSetup(suite) {    
                         protected  void setUp() {    
                                oneTimeSetUp();    
                        }    

                         protected  void tearDown() {    
                                oneTimeTearDown();    
                        }    
                };    
                 return wrapper;    
        }    

         public  static  void oneTimeSetUp() {    
                 // one-time initialization code    
        }    

         public  static  void oneTimeTearDown() {    
                 // one-time cleanup code    
        }         
}
 
三. 其他
对于protected方法的test,可以把test case放在被test的类同一目录。
 
本文转自 Icansoft 51CTO博客,原文链接: http://blog.51cto.com/android/49994

相关文章
|
Java 应用服务中间件 Android开发
IDEA 编译时 报 “常量字符串过长” 解决办法
IDEA 编译时 报 “常量字符串过长” 解决办法
3531 0
|
负载均衡 Java 应用服务中间件
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(一)
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(一)
2830 0
|
10月前
|
JSON 缓存 监控
淘宝商品详情接口(Taobao.item_get)丨淘宝API接口指南
淘宝商品详情接口(Taobao.item_get)允许开发者通过HTTP GET方法获取淘宝商品的详细信息,包括商品ID、价格、库存等。请求需包含key、secret、num_iid等必选参数,支持缓存及多种返回格式。此接口广泛应用于电商数据分析、商品选品、价格监控等领域,提升商家运营效率。
1960 1
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
122063 0
|
关系型数据库 MySQL 数据库
mysql的用户管理和权限控制
本文介绍了MySQL中用户管理的基本操作,包括创建用户、修改密码、删除用户、查询权限、授予权限和撤销权限的方法。
457 2
|
负载均衡 监控 算法
揭秘负载均衡的五大算法秘籍:让你的服务器轻松应对亿万流量,不再崩溃!
【8月更文挑战第31天】在互联网快速发展的今天,高可用性和可扩展性成为企业关注的重点。负载均衡作为关键技术,通过高效分配网络流量提升系统处理能力。本文介绍了轮询、加权轮询、最少连接及IP哈希等常见负载均衡算法及其应用场景,并提供Nginx配置示例。此外,还探讨了如何根据业务需求选择合适算法、配置服务器权重、实现高可用方案、监控性能及定期维护等最佳实践,助力系统优化与用户体验提升。
354 2
|
存储 算法 Linux
.bz2是什么格式的文件?Linux如何解压这种类型的文件?
【8月更文挑战第3天】.bz2是什么格式的文件?Linux如何解压这种类型的文件?
2285 1
|
存储 Linux 应用服务中间件
Docker Volume 看这一篇就够了
Docker Volume 看这一篇就够了
15719 3
Docker Volume 看这一篇就够了
|
SQL 运维 资源调度
开源大数据可观测性方案实践 - 助力集群运维智能化、便捷化
在本篇文章中,我们将介绍大数据集群领域所需的可观测性,实践大数据集群可观测所需要的条件和面临的挑战,以及阿里云EMR 产品如何通过 EMR Doctor 实现大数据可观测并向用户提供相关能力。
17672 4
开源大数据可观测性方案实践 - 助力集群运维智能化、便捷化
|
Apache 数据中心 数据安全/隐私保护
Apache Doris 资源隔离详解3
Apache Doris 资源隔离详解3
554 0