`
shukuiyan
  • 浏览: 413554 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

应用junit进行单元测试

阅读更多
 
 
 
<!-- 正文begin -->





测试可以分类为:白箱测试、黑箱测试、单元测试、集成测试、功能测试...。白箱测试是指在知道被测试的软件如何(How)完成功能和完成什么样(What)的功能的条件下所作的测试。一般是由开发人员完成。因为开发人员最了解自己编写的软件。黑箱测试则是指在知道被测试的软件完成什么样(What)的功能的条件下所作的测试。一般是由测试人员完成。

接下来我们介绍一下单元测试,单元测试是一种白箱测试。目的是验证一个或若干个类是否按所设计的那样正常工作。集成测试则是验证所有的类是否能互相配合,协同完成特定的任务,目前我们暂不关心它。下面我所提到的测试,除非特别说明,一般都是指单元测试。

测试是一个持续的过程。也就是说测试贯穿与开发的整个过程中,单元测试尤其适合于迭代增量式(iterative and incremental)的开发过程。Martin Fowler(有点儿像引用孔夫子的话)甚至认为:“在你不知道如何测试代码之前,就不应该编写程序。而一旦你完成了程序,测试代码也应该完成。除非测试成功,你不能认为你编写出了可以工作的程序。”我并不指望所有的开发人员都能有如此高的觉悟,这种层次也不是一蹴而就的。但我们一旦了解测试的目的和好处,自然会坚持在开发过程中引入测试。

 

看下面的例子:
//将要被测试的类
public class Car {
    public int getWheels() {
return 4;
}
}

//执行测试的类
public class testCar {
public static void main(String[] args) {
testCar myTest = new testCar();
myTest.testGetWheels();
}

public testGetWheels() {
int expectedWheels = 4;
Car myCar = Car();
if (expectedWheels==myCar.getWheels()) 
System.out.println("test [Car]: getWheels works perfected!");
else
System.out.println("test [Car]: getWheels DOESN'T work!");
}
}

 

这样写的测试类有多个弊端:比如每次测试的时候都敲入上面的命令、如果没有一定的规范,测试类的编写将会成为另一个需要定义的标准、测试类的代码多于被测试的类。

为了避免以上,我们要做的就是尽量降低所付出的代价:我们编写的测试代码要能被维护人员容易的读取,我们编写测试代码要有一定的规范。最好IDE工具可以支持这些规范。JUnit应运而生了。

JUnit是一个Open Source的项目。JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。用于Java开发人员编写单元测试之用。”所谓框架就是 Erich Gamma 和 Kent Beck 定下了一些条条框框,你编写的测试代码必须遵循这个条条框框:继承某个类,实现某个接口。其实也就是我们前面所说的规范。好在JUnit目前得到了大多数软件工程师的认可。遵循JUnit我们会得到很多的支持。回归测试就是你不断地对所编写的代码进行测试:编写一些,测试一些,调试一些,然后循环这一过程,你会不断地重复先前的测试,哪怕你正编写其他的类,由于软件熵的存在,你可能在编写第五个类的时候发现,第五个类的某个操作会导致第二个类的测试失败。通过回归测试我们抓住了这条大Bug。
回归测试框架-JUnit
通过前面的介绍,我们对JUnit有了一个大概的轮廓。知道了它是干什么的。现在让我们动手改写上面的测试类testCar使其符合Junit的规范--能在JUnit中运行。

//执行测试的类(JUnit版)
import junit.framework.*;

public class testCar extends TestCase {

protected int expectedWheels;
protected Car myCar;

public testCar(String name) {
super(name);
}

protected void setUp() {
expectedWheels = 4;
myCar = new Car();
}

public static Test suite() {
/*
 * the type safe way
 *
TestSuite suite= new TestSuite();
suite.addTest(
new testCar("Car.getWheels") {
 protected void runTest() { testGetWheels(); }
}
);
return suite;
*/

/*
 * the dynamic way
 */
return new TestSuite(testCar.class);
}

public void testGetWheels() {
assertEquals(expectedWheels, myCar.getWheels());
}
}
1>;import语句,引入JUnit的类
2>;继承 TestCase 。可以暂时将一个TestCase看作是对某个类进行测试的方法的集合。详细介绍请参看JUnit资料

3>;setUp()设定了进行初始化的任务。我们以后会看到setUp会有特别的用处。

4>;testGetWheeels()对预期的值和myCar.getWheels()返回的值进行比较,并打印比较的结果。assertEquals是junit.framework.Assert中所定义的方法,junit.framework.TestCase继承了junit.framework.Assert。

5>;suite()是一个很特殊的静态方法。JUnit的TestRunner会调用suite方法来确定有多少个测试可以执行。上面的例子显示了两种方法:静态的方法是构造一个内部类,并利用构造函数给该测试命名(test name, 如 Car.getWheels ),其覆盖的runTest()方法,指明了该测试需要执行那些方法--testGetWheels()。动态的方法是利用内省(reflection )来实现runTest(),找出需要执行那些测试。此时测试的名字即是测试方法(test method,如testGetWheels)的名字。JUnit会自动找出并调用该类的测试方法。

6>;将TestSuite看作是包裹测试的一个容器。如果将测试比作叶子节点的话,TestSuite就是分支节点。实际上TestCase,TestSuite以及TestSuite组成了一个composite Pattern。

 

转 自 http://www.chinaunix.net/jh/26/215124.html

分享到:
评论

相关推荐

    软件测试实验-JUnit单元测试.pdf

    软件测试实验-JUnit单元测试是软件测试的一种方法,它使用JUnit框架来进行单元测试。JUnit是一个开源的Java编程语言的单元测试框架,由Erich Gamma和Kent Beck编写。JUnit测试是一种白盒测试工具,具有JUnit经验对于...

    Junit 单元测试完整案例

    【Junit单元测试完整案例】深入解析 在软件开发中,单元测试是验证代码功能是否正确、独立单元是否按预期工作的关键步骤。Junit作为Java领域最常用的单元测试框架,为开发者提供了简单易用的API来进行测试。本案例...

    junit单元测试教程教程.pdf

    这篇教程将帮助你理解和应用 JUnit 进行单元测试。 首先,理解测试的重要性至关重要。测试不仅仅是为了找出错误,更是一种保障软件质量的方式。正如描述中提到的,随着项目的发展,软件的复杂性增加,可能导致...

    JDBC实现CRUD并用Junit进行单元测试

    本篇文章将深入探讨如何使用JDBC来实现创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)数据,以及结合JUnit进行单元测试确保代码的正确性。 首先,我们要理解JDBC的基本工作流程: 1. 加载驱动:使用...

    SpringBoot使用Junit进行单元测试

    Junit作为Java领域最常用的单元测试框架,与Spring Boot结合使用,可以方便地对应用程序进行测试。本文将深入探讨如何在Spring Boot项目中利用Junit进行单元测试。 首先,我们需要理解单元测试的基本概念。单元测试...

    junit4单元测试实例

    本篇文章将深入探讨JUnit4的单元测试实例,帮助你更好地理解和应用这个工具。 一、JUnit4简介 JUnit4相较于之前的版本,引入了注解(Annotation)机制,极大地简化了测试用例的编写。例如,`@Test`注解用于标记测试...

    Junit单元测试的实验报告.docx

    简单介绍了Junit的安装过程与实例应用。应用的问题是软件测试中的佣兵问题,整个文档中有代码及测试结果,可以更好地帮助学生了解Junit单元测试中的作用。

    UnitTest:使用 Junit 进行单元测试

    在深入讲解如何使用 JUnit 进行单元测试之前,我们先理解一下单元测试的基本概念。单元测试是对程序中最小可测试单元进行检查和验证,通常这个单元是函数、方法或类。通过单元测试,我们可以确保代码的正确性,减少...

    在java中使用 junit单元测试

    "JUnit单元测试在Java中的应用" 在Java中使用JUnit单元测试是软件开发过程中不可或缺的一部分。单元测试是指在开发过程中,对代码的一部分进行测试,以确保代码的正确性和可靠性。在Java中,JUnit是最流行的单元...

    spring MVC junit 单元测试(controller)

    这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在的问题,提高软件的可靠性和可维护性。 首先,让我们了解Spring MVC的基本概念。Spring MVC...

    junit4.8.1 单元测试 完整压缩包

    更新可能包括了对新功能的详细解释、示例代码的改进,或是对已知问题的说明,这些都能帮助开发者更好地理解和应用JUnit 4.8.1。 压缩包文件"junit4.8.1"很可能包含了JUnit库的JAR文件和其他相关资源,如文档、示例...

    如何利用JUnit进行单元测试.ppt

    本文总结了JUnit单元测试框架的基本概念和使用方法,涵盖了JUnit的介绍、单元测试的概念、JUnit的四种测试工具简介、如何利用JUnit进行单元测试的步骤等。 JUnit简介 -------- JUnit是一个开发源代码的Java测试...

    junit4.7单元测试

    在实际项目中,`单元测试.txt` 文件可能包含了如何在具体项目中使用 JUnit 4.7 进行单元测试的详细步骤或示例。通过阅读这个文本文件,你可以进一步了解如何在 Eclipse 中配置和执行 JUnit 测试,以及如何编写有效的...

    junit单元测试

    【junit单元测试】 单元测试是软件开发过程中的重要环节,它主要用于验证代码的各个独立模块是否按照预期工作。JUnit是Java编程语言中最常用的单元测试框架,它为开发者提供了编写和执行测试用例的简便方法。这篇...

    JUnit单元测试技术

    总的来说,JUnit单元测试技术是Java开发中不可或缺的工具,它帮助我们编写健壮的代码,减少bug的出现,提升软件质量。掌握JUnit的使用不仅能提高个人的编程技能,也是团队协作和项目管理的重要一环。通过不断实践和...

    junit4 单元测试源码

    【标题】"junit4 单元测试源码"涉及的是Java编程中单元测试的重要工具JUnit4的使用,这是对代码进行验证和调试的关键部分。JUnit4是JUnit框架的一个版本,它提供了更灵活的注解、测试套件管理和断言方式,使得编写...

    用友NC框架中使用Junit单元测试小技巧

    ### 用友NC框架中使用Junit单元测试的小技巧 #### 概述 在软件开发过程中,单元测试作为确保代码质量的重要手段之一,其地位不言而喻。而在基于用友NC框架进行开发时,合理地运用Junit进行单元测试能够极大地提升...

Global site tag (gtag.js) - Google Analytics