`
snail_fish
  • 浏览: 33165 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Junit4使用说明

阅读更多

1、测试任何可能的错误。单元测试不是用来证明您是对的,而是为了证明您没有错

2、单元测试代码和被测试代码使用一样的包,不同的目录。

--junit4.0使用注意说明;

3、测试方法必须按照规范书写

   1. 测试方法必须使用注解 org.junit.Test 修饰。
   2. 测试方法必须使用 public void 修饰,而且不能带有任何参数。
   @Test public void wordFormat4DBegin(){
       String target = "EmployeeInfo";
       String result = WordDealUtil.wordFormat4DB(target);
      
       assertEquals("employee_info", result);
   }

4、同一测试类中的所有测试方法都可以共用它来初始化 Fixture 和注销 Fixture。和编写 JUnit 测试方法一样,公共 Fixture 的设置也很简单,您只需要:

   1. 使用注解 org,junit.Before 修饰用于初始化 Fixture 的方法。
   2. 使用注解 org.junit.After 修饰用于注销 Fixture 的方法。
   3. 保证这两种方法都使用 public void 修饰,而且不能带有任何参数。
       //初始化Fixture方法
       @Before public void init(){……}
       //注销Fixture方法
       @After public void destroy(){……}
    引入了类级别的 Fixture 设置方法,编写规范如下:
    1. 使用注解 org,junit.BeforeClass 修饰用于初始化 Fixture 的方法。
    2. 使用注解 org.junit.AfterClass 修饰用于注销 Fixture 的方法。
    3. 保证这两种方法都使用 public static void 修饰,而且不能带有任何参数
       //类级别Fixture初始化方法
       @BeforeClass public static void dbInit(){……}
       //类级别Fixture注销方法
       @AfterClass public static void dbClose(){……}
    类级别的 Fixture 仅会在测试类中所有测试方法执行之前执行初始化,并在全部测试方法测试完毕之后执行注销方法。

5、注解 org.junit.Test 中有两个非常有用的参数:expected 和 timeout。

   1、参数 expected 代表测试方法期望抛出指定的异常,如果运行测试并没有抛出这个异常,则 JUnit 会认为这个测试没有通过。
       @Test(expected=UnsupportedDBVersionException.class)
       public void unsupportedDBCheck(){
           ……
       }
   2、参数timeout,指定被测试方法被允许运行的最长时间应该是多少,如果测试方法运行时间超过了指定的毫秒数,则JUnit认为测试失败。
       @Test(timeout=1000)
       public void selfXMLReader(){
           ……
       }

6、org.junit.Ignore 用于暂时忽略某个测试方法,因为有时候由于测试环境受限,并不能保证每一个测试方法都能正确运行。

       @ Ignore(“db is down”)
       @Test(expected=UnsupportedDBVersionException.class)
       public void unsupportedDBCheck(){
           ……
       }

7、新概念出现了——测试运行器

JUnit 中所有的测试方法都是由它负责执行的。JUnit 为单元测试提供了默认的测试运行器,但 JUnit 并没有限制您必须使用默认的运行器。相反,您不仅可以定制自己的运行器(所有的运行器都继承自 org.junit.runner.Runner),而且还可以为每一个测试类指定使用某个具体的运行器。指定方法也很简单,使用注解 org.junit.runner.RunWith 在测试类上显式的声明要使用的运行器即可:

       @RunWith(CustomTestRunner.class)
       public class TestWordDealUtil {
           ……
       }

8、

在实际项目中,随着项目进度的开展,单元测试类会越来越多,可是直到现在我们还只会一个一个的单独运行测试类,这在实际项目实践中肯定是不可行的。为了解 决这个问题,JUnit 提供了一种批量运行测试类的方法,叫做测试套件。这样,每次需要验证系统功能正确性时,只执行一个或几个测试套件便可以了。测试套件的写法非常简单,您只 需要遵循以下规则:
   1. 创建一个空类作为测试套件的入口。
   2. 使用注解 org.junit.runner.RunWith 和 org.junit.runners.Suite.SuiteClasses 修饰这个空类。
   3. 将 org.junit.runners.Suite 作为参数传入注解 RunWith,以提示 JUnit 为此类使用套件运行器执行。
   4. 将需要放入此测试套件的测试类组成数组作为注解 SuiteClasses 的参数。
   5. 保证这个空类使用 public 修饰,而且存在公开的不带有任何参数的构造函数。
       package com.ai92.cooljunit;
       import org.junit.runner.RunWith;
       import org.junit.runners.Suite;
       ……
       /**
       * 批量测试 工具包 中测试类
       * @author Ai92
       */
       @RunWith(Suite.class)
       @Suite.SuiteClasses({TestWordDealUtil.class,xxx.class})
       public class RunAllUtilTestsSuite {
       }
上例代码中,我们将前文提到的测试类 TestWordDealUtil 放入了测试套件 RunAllUtilTestsSuite 中,在 Eclipse 中运行测试套件,可以看到测试类 TestWordDealUtil 被调用执行了。测试套件中不仅可以包含基本的测试类,而且可以包含其它的测试套件,这样可以很方便的分层管理不同模块的单元测试代码。但是,您一定要保证 测试套件之间没有循环包含关系,否则无尽的循环就会出现在您的面前……

9、参数化测试

为了保证单元测试的严谨性,我们模拟了不同类型的字符串来测试方法的处理能力,为此我们编写大量的单元测试方法。可是这些测试方法都是大同小异:代码结构 都是相同的,不同的仅仅是测试数据和期望值。有没有更好的方法将测试方法中相同的代码结构提取出来,提高代码的重用度,减少复制粘贴代码的烦恼?在以前的 JUnit 版本上,并没有好的解决方法,而现在您可以使用 JUnit 提供的参数化测试方式应对这个问题。
参数化测试的编写稍微有点麻烦(当然这是相对于 JUnit 中其它特性而言):
   1. 为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized。
   2. 为测试类声明几个变量,分别用于存放期望值和测试所用数据。
   3. 为测试类声明一个使用注解 org.junit.runners.Parameterized.Parameters 修饰的,返回值为 java.util.Collection 的公共静态方法,并在此方法中初始化所有需要测试的参数对。
   4. 为测试类声明一个带有参数的公共构造函数,并在其中为第二个环节中声明的几个变量赋值。
   5. 编写测试方法,使用定义的变量作为参数进行测试。
我们按照这个标准,重新改造一番我们的单元测试代码:
       @RunWith(Parameterized.class)
       public class TestWordDealUtilWithParam {

               private String expected;
  
               private String target;
  
               @Parameters
               public static Collection words(){
                       return Arrays.asList(new Object[][]{
                   {"employee_info", "employeeInfo"},       //测试一般的处理情况
                   {null, null},                           //测试 null 时的处理情况
                   {"", ""},                               //测试空字符串时的处理情况
                   {"employee_info", "EmployeeInfo"},       //测试当首字母大写时的情况
                   {"employee_info_a", "employeeInfoA"},   //测试当尾字母为大写时的情况
                   {"employee_a_info", "employeeAInfo"}   //测试多个相连字母大写时的情况
                       });
               }
  
              /**
              * 参数化测试必须的构造函数
              * @param expected   期望的测试结果,对应参数集中的第一个参数
              * @param target   测试数据,对应参数集中的第二个参数
              */
               public TestWordDealUtilWithParam(String expected , String target){
                   this.expected = expected;
                   this.target = target;
               }
  
              /**
              * 测试将 Java 对象名称到数据库名称的转换
              */
               @Test public void wordFormat4DB(){
                   assertEquals(expected, WordDealUtil.wordFormat4DB(target));
               }
       }

10、junit3兼容junit4可以在测试类中加入

       public static junit.framework.Test suite() {
          return new JUnit4TestAdapter(AssertionTest.class);  
       }

11、JUnit 4 为比较数组添加了两个 assert() 方法:

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

12、需要补充的地方

JUnit 4 基本上是一个新框架,而不是旧框架的升级版本。JUnit 3 开发人员可能会找到一些原来没有的特性。
最明显的删节就是 GUI 测试运行程序。如果您想在测试通过时看到赏心悦目的绿色波浪线,或者在测试失败时看到令人焦虑的红色波浪线,那么您需要一个具有集成 JUnit支持的 IDE,比如 Eclipse。不管是 Swing 还是 AWT 测试运行程序都不会被升级或捆绑到 JUnit 4 中。
下一个惊喜是,失败(assert 方法检测到的预期的错误)与错误(异常指出的非预期的错误)之间不再有任何差别。尽管JUnit3测试运行程序仍然可以区别这些情况,而JUnit4运行程序将不再能够区分。
最后,JUnit 4没有 suite()方法,这些方法用于从多个测试类构建一个测试套件。相反,可变长参数列表用于允许将不确定数量的测试传递给测试运行程序。

分享到:
评论

相关推荐

    JUnit使用说明(完整)

    在开始使用JUnit 4之前,确保你已安装了Java Development Kit(JDK)版本1.5或更高,因为JUnit 4利用了Java 5引入的注解(Annotation)功能。同时,虽然JUnit可以独立于集成开发环境(IDE)使用,但Eclipse是一个...

    Junit使用说明 详细

    4. `@Ignore`: 如果某个测试暂时不想执行,可以添加此注解,Junit会跳过该测试。 5. `@Expected`: 预期异常,用于指定测试方法应该抛出的异常类型。 四、断言(Assertions) Junit提供了一系列的断言方法,用于验证...

    Junit使用说明文档

    **Junit使用说明文档** **一、Junit简介** JUnit是一款广泛应用于Java编程语言的单元测试框架,由Ernst Konig和Kent Beck在2000年开发。它是XUnit系列测试框架的一员,旨在帮助开发者对代码进行快速、可靠且可重复...

    powermock-module-junit4-2.0.9-API文档-中英对照版.zip

    赠送jar包:powermock-module-junit4-2.0.9.jar; 赠送原API文档:powermock-module-junit4-2.0.9-javadoc.jar; 赠送源代码:powermock-module-junit4-2.0.9-sources.jar; 赠送Maven依赖信息文件:powermock-...

    Junit4完整源码

    - `javadoc`目录下的文档提供了JUnit4 API的详细说明,包括类、接口、方法等的用途和用法,是学习和查找特定功能的重要参考。 5. **实际应用**: - **TDD实践**:JUnit4是TDD的主要工具,开发者可以先编写测试,...

    Junit4的解释文档javadoc下载

    JUnit4的解释文档,通常以JavaDoc的形式提供,包含了详细的API说明和使用示例,是学习和理解JUnit4功能和用法的重要资源。 在JavaDoc中,你可以找到关于JUnit4的所有公共类、接口和方法的详细信息。例如,`@Test`...

    JUnit4.zip

    JUnit4 是一个广泛使用的Java编程语言的单元测试框架。它为开发者提供了一种方便的方式来编写和执行可重复的测试,确保代码的质量和稳定性。这个压缩包 "JUnit4.zip" 包含了JUnit 4的不同版本,从4.7到4.11,这将有...

    junit4API.chm.html

    这个API文档包含了JUnit4的所有核心类、接口和方法的详细说明,是理解和使用JUnit4的关键资源。以下是关于JUnit4 API的一些关键知识点: 1. **JUnit注解**:JUnit4引入了注解(Annotation)机制,使得测试代码更加...

    surefire-junit4-2.7.2-javadoc.jar

    首先,"surefire-junit4-2.7.2-javadoc.jar"是Surefire插件与JUnit4版本2.7.2的Java文档(Javadoc)打包文件,它包含了该版本中所有公开的API接口、类和方法的详细说明,对于开发者理解和使用这两个工具具有极大的...

    Hibernate4+SpringMVC+Junit4+log4j环境搭建Jar包

    以上就是关于“Hibernate4+SpringMVC+Junit4+log4j环境搭建”的详细说明。在实际开发中,你还需要根据项目具体需求选择合适的数据库驱动包,以及可能用到的其他第三方库,如Jackson(用于JSON序列化和反序列化)。...

    JUnit4.zip下载

    JUnit4 是一个广泛使用的Java编程语言的单元测试框架。它为开发者提供了一种方便的方式来编写和执行可重复的、自动化的测试用例,确保代码的质量和功能的正确性。JUnit4.zip 包含了不同版本的 JUnit jar 文件以及...

    powermock-module-junit4-common-2.0.9-API文档-中英对照版.zip

    赠送jar包:powermock-module-junit4-common-2.0.9.jar; 赠送原API文档:powermock-module-junit4-common-2.0.9-javadoc.jar; 赠送源代码:powermock-module-junit4-common-2.0.9-sources.jar; 赠送Maven依赖信息...

    junit说明

    随着时间的发展,JUnit经历了多个版本的迭代,其中JUnit4引入了注解,极大地简化了测试用例的编写。而最新的JUnit5进一步扩展了这个框架,提供了更多的灵活性和可扩展性。 在JUnit中,测试通常以公共静态无参方法的...

    Junit5用户手册

    尽管JUnit5与JUnit4不完全兼容,但仍然可以使用JUnit4来运行JUnit5的测试。 **4.5 配置参数** 介绍了如何配置JUnit5的运行参数,以适应不同的测试需求。 #### 五、扩展模型 **5.1 概览** 扩展模型是JUnit5的一...

    junit-4.11-API文档-中文版.zip

    赠送jar包:junit-4.11.jar; 赠送原API文档:junit-4.11-javadoc.jar; 赠送源代码:junit-4.11-sources.jar; 赠送Maven依赖信息文件:...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    junit-4.12-API文档-中文版.zip

    赠送jar包:junit-4.12.jar; 赠送原API文档:junit-4.12-javadoc.jar; 赠送源代码:junit-4.12-sources.jar; ...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    junit-4.12.jar下载

    通过查看这些文档,开发者可以快速查找类、方法的使用方式和参数说明。同样,`junit-4.11-sources.jar`和`junit-4.7-src.jar`包含了JUnit源代码,这有助于开发者深入理解内部实现,甚至可以自定义或扩展JUnit的功能...

    Junit的简单说明

    同时,JUnit也被广泛应用于持续集成(CI)环境中,与Jenkins、GitLab CI等工具结合使用,实现了自动化测试和部署,极大地提升了开发效率和产品质量。 总之,JUnit作为一款强大的Java测试框架,不仅为开发者提供了丰富...

    Junit简介和扩展

    JUnit4在JUnit3的基础上进行了大量改进,特别是通过使用Java 5的注解特性来简化测试用例的编写。 1. **无需继承TestCase**:JUnit4不再要求测试类必须继承`TestCase`类。 2. **测试方法标识**:使用`@Test`注解来...

Global site tag (gtag.js) - Google Analytics