《Junit in Action》学习笔记

本文详细介绍JUnit框架的基本概念与使用方法,包括测试用例、测试集合、测试运行器等核心组件的应用,以及最佳实践建议。

本文内容简介:
1.Junit概述
2.Junit相关知识点 和 test suite & testcase使用
3.项目开发流程 & 软件测试类型(Not Finish)
4.白盒测试覆盖(Not Finish)
5.TDD及敏捷开发模型(Not Finish)


正文

1.Junit概述:

    ①Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。
    ②Junit测试是自动化测试的一种方式,它使得bug容易被控制。
    ③Junit本质上是一套框架,即开发者制定了一套条条框框,遵循这此条条框框要求编写测试代码,如继承某个类,实现某个接口,就可以用Junit进行自动测试了。
    ④由于Junit相对独立于所编写的代码,可以测试代码的编写可以先于实现代码的编写,XP 中推崇的 test first design的实现有了现成的手段:用Junit写测试代码,写实现代码,运行测试,测试失败(状态条为:红色),修改实现代码,再运行测试,直到测试成功(状态条为:绿色)。以后对代码的修改和优化,运行测试成功,则修改成功。

2.Junit 相关使用

   ①概念:
    |- TestCase(测试用例)--扩展Junit的TestCase类的类。它以testXXX方法的形式包含一个或多个测试。一个testcase把具有公共行为的测试归入一组。

    |- TestSuite(测试集合)--组测试。一个test suite是吧多个相关测试归入一组的快捷方式。例如,如果没有为TestCase 定义一个test suite,那么Junit会自动提供一个test suite。包含TestCase中所有测试。

    |- TestRunner(测试运行器)--执行test suite的程序。Junit提供了几个test runner,可以用来执行你的测试。 没有TestRunner解开,只有一个所偶test runner都继承的BaseTestRunner. 因此,当我们编写TestRunner的时候,实际上指的是任何继承BaseTestRunner的test runner类。

    ②Junit成员共同产生测试结果:
        TestCase + TestSuite + BaseTestRunner =  TestResult

   ③JUnit基本框架的结构
       |- import声明引入必须的JUnit类
       |- 定义一个测试类从TestCase继承
       |- 必需一个调用super(String)的构造函数
       |- 测试类包含一些以test..开头的测试方法
       |- 每个方法包含一个或者多个断言语句
     当然还有一些其他的内容,但满足以上几条的就已经是一个JUnit测试了

   ④JUnit的命名规则和习惯
       |- 如果有一个名为ClassA的被测试函数,那么测试类的名称就是TestClassA
      |- 如果有一个名为methodA的被测试函数,那么测试函数的名称就是testMethodA


   ⑤介绍Test Case、test suite、Test Runner常规使用: (使用的Eclipse自带的Junit)。
       |-Test Case

Java代码 复制代码
  1. import junit.framework.*;  //导入junit.jar包   
  2.   /*TestXxx继承自TestCase(命名规范:一般在类名前加Test)*/  
  3.   public class TestXxx extends TestCase{      
  4.  /*测试方法的具体实现(命名规范:以小写的testXxx形式。否则Junt不会自动识别该方法为测试方法)*/  
  5.  public void testXxx(){};    
  6.   }  
      import junit.framework.*;  //导入junit.jar包
        /*TestXxx继承自TestCase(命名规范:一般在类名前加Test)*/
        public class TestXxx extends TestCase{   
       /*测试方法的具体实现(命名规范:以小写的testXxx形式。否则Junt不会自动识别该方法为测试方法)*/
       public void testXxx(){}; 
        }


              
       |-test suite

Java代码 复制代码
  1. import junit.framework.Test;   
  2. public static Test suite(){   
  3.    TestSuite suite = new TestSuite();   //实例化   
  4.      suite.addTest(new MoneyTest("testXxx"));  //添加测试方法   
  5.      suite.addTestSuite(TestMoney.class);  //添加整个测试到集合中   
  6.  }  
       import junit.framework.Test;
       public static Test suite(){
          TestSuite suite = new TestSuite();   //实例化
            suite.addTest(new MoneyTest("testXxx"));  //添加测试方法
            suite.addTestSuite(TestMoney.class);  //添加整个测试到集合中
        }


           
       |- Test Runner (junit.textui.TestRunner)

Java代码 复制代码
  1. public static void main(String args[]){   
  2.   junit.textui.TestRunner.run(suite()); //将testsuite 执行。   
  3.  }  
        public static void main(String args[]){
          junit.textui.TestRunner.run(suite()); //将testsuite 执行。
         }


      
      
   ⑥Junit断言简介:(都继承自Assert超类)
        |- assertEquals(a, b)
          Asserts that two primitive values are equal.
          测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法)

        |- assertFalse(a)
          Asserts that a condition (a) is false.
          测试a是否为false(假),a是一个Boolean数值。

        |- assertTrue(a)
          Asserts that a condition is true.
          测试a是否为true(真),a是一个Boolean数值

        |- assertNotNull(a)
          Asserts that an object isn't null.
          测试a是否非空,a是一个对象或者null。

        |- assertNull(a)
          Asserts that an object is null.
          测试a是否为null,a是一个对象或者null。

        |- assertNotSame(a, b)
          Asserts that two objects do not refer to the same object.
          测试a和b是否没有都引用同一个对象。

        |- assertSame(a, b)
          Asserts that two objects refer to the same object.
          测试a和b是否都引用同一个对象。
        |- fail(message)
           当程序错误时候,输出错误消息

        |-自定义断言
           通常而言,JUnit所提供的标准断言对大多数测试已经足够了。然而,在某些环境下,我们可能更需要自定义一些断言来满足我们的需要。
           通常的做法是定义一个TestCase的子类,并且使用这个子类来满足所有的测试。新定义的共享的断言或者公共代码放到这个子类中。

     ⑦ Junit最佳实践:
        |- 一次只有一个测试对象:(当无法预计这些对象发生改变时不会造成相互影响)

       |- 选择有一个的测试方法名:testXxx命名模式(Xxx为待测方法)。若在同一个方法增添其他测试testXxxYyy的命名模式

        |- Assert调用总解释失败原因。第一个参数务必为描述文本

        |- setUp方法用来实例化DefaultController. Junit会在调用其他之前调用

        |- 一个单元测试等于一个测试方法(简介、专注)

       |- 测试任何可能失败的事务

        |- 让测试改善代码
            编写单元测试常常有助有你写出更好的代码。理由很简单:test case是你代码的用户只有在使用代码时才能发现代码的缺点。所以,不要犹豫,应当根据测试时发现的不使之处重构代码,使其易于使用。测试驱动开发(TDD)的实践就依赖于这条原则。通过先编写测试,你就可以从黛米用户的角度来开发你的类。

        |- 让异常测试易懂。把case块中异常变量命名为expected
       |- 同一个包,分离目录

3.软件测试类型分为四类:(集成测试、功能测试、压力/负荷测试、验收测试) 
  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值