测试实践:Eclipse 之 JUnit(一) 转载

转载 2004年09月11日 11:18:00

测试实践:Eclipse JUnit(一)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

(Using JUnit With Eclipse IDE)

 

 

这篇文章将给你介绍JUnit——一个工程测试调式的工具。 在介绍了了 测试驱动开发理论之后,我们继续介绍“怎样用Eclipse创建你的、JUnit Test”。 我们会用象"hello word"一样简单例子来向你揭露JUnit Case

 

自动化测试(automated testing)在好多书籍中被介绍了,但很少注意讲怎样去组织这些测试。 当测试写的越多时,很难知道把这些测试放到哪或者用什么去调用它们。 在极限编程---Extreme Programming(xp),测试驱动开发[test-driven development (TDD)]盛行的时代,这成了一个很大的问题。 你可以把 测试驱动开发(TDD)认为是"Development through testing" 开发由经测试。

 

TDD的主要条款:

l         在任何代码片段之前,必须先写好自动检测这段代码功能的程序。既然代码不存在,那么测试在一开始就失败。

l         测试通过之后,复制的代码必须删掉。

 

象这样的方式每个程序员都可以应用,并不需要特定的方法论。但在我们开始写test之前, 值得我们注意的是,先考虑一下如何组织自动化测试。

 

 

这里有几种我们需要考虑的测试

l         单元测试(Unit test) :这些是为检查个别模块(比如classes类)服务的。 如果对象需要访问外部的数据源,比如Database,就需要通过一些模拟的对象(MOCK object)来模拟Database (但这也只有在真实环境的数据与测试环境不同的时候。----比如测试环境里面没有真实Datebase,就需要MOCK Object

 

l         用户测试 Customer's test:这里是功能的,系统的并且认可的测试。系统中所有的行为检查都做为一个整体。 XP理论中,这些测试,是由用户编写的,给出测试案例提纲。

l         集成测试 Itegration tests:  这些测试象是在用户测试和单元测试之间的十字路口。 集成测试帮助程序测试几个级别中交互。 Mock Object不会出现在集承测试中,他会增加测试时间。同样,集成测试也经常需要存在的特定的测试环境,比如从数据库中放一些测试数据。集成测试也许使用外部的lib Cactus就是这样一个J2EE集成的lib 解释这些测试已经超出了本篇文章的范围,并且也需要详细的理论叙述,所以,你仅需要知道这种测试存在就可以了。

l             开发测试(Developer's test : 这种测试就是那些开发者校验 整段代码,新加的代码,新加的函数函数。 对于每个开发而言, 随时生成新的的测试去检查代码是很重要的。 组织这些测试和组织这些代码有着同样的重要性。

 

至于本文其他地方,只要说到"测试",就是专指开发测试(Developer's test)。

 

在开发期间, 一个程序员有时可能问自己:系统中这个行为有test么,这个test存在么,哪里可以找到这个test?每次发现错误,都是靠最基础修改bug而不是通过自动测试,这是一个典型的例子。 在这种情形下事情进展可能是:

 

1 去找到这个函数的测试(可能测试已经写了,但里面还有一些小错误)

2 如果这样的测试还没有,或者测试不能盖住这种错误,我们就写一个新的测试来盖住这种错误。

3 现在 我们深信,程序在新的测试中不会通过。

4 修复程序中的bug

5 再运行测试

6 确定程序在测试中通过了。

 

当然,可能出现各种各样的处理, 但思想必须很明确:你只需纠正那些被测试找出那些错误。

 

现在,让我们告诉你一个开发人员怎样解决这种情形。 通过存在的功能性的测试

 

l         我利用一些集成的开发环境(IDE)来查找 被修正那些类和方法的放在什么地方。

l         制造一个已知的错误环境,来查找那些代码判断存在错误。

l         最后但不是最不重要的,写好测试并且放到一个现有的测试类中去。 如果你不小心出了错误,   期望你和你的同事能注意到副本,并且纠正它

 

都准就绪,开始建立测试了, 所以现在需要给测试取一个名称。 你可能说,“这不是问题: 在每个类面前加个Test就是了!” 但并不是那么简单的, 让我告诉你这样如果可能造成的问题:

l         当时候我们在使用TDD的方式开发时, 需要测试的class或者method可能都不存在。

l         也可能一个test 含盖了好几个方法,甚至好几个classes

 

这些仅仅是最普通的问题, 下面还有更多。

 

给个在test命名上的建议: test 类的取名首先应该表达出这个类是一个test类,并且能确切的表示出他要检查哪些,留有这个原class名的味道。 其实这很容易,请别担心这个名称会变的很长或者很丑陋,自己随便怎样取都可以。

 

    

下面我们将使用Eclipse中的JUnit工具建立我们的第一个测试,假定你已经下载了这个产品的当前版本, 如果没有,你随时可以从它的官方网站(www.eclipse.org)下载。我们需要JUnit,你也可以从它的官方网站(www.junit.org)上下载,下载并解压缩到你硬盘中存放java libaries的地方。

 

 

打开Eclipse.我们将建立一个新的工程的工作空间(workplace project File -> New ->Project,选择Java一路Next 输入工程名称project name,比如ProjectWithJUnit. 点击完成。  这样就建立了一个新工程,让我们配置一下我们的Eclipse,于是,我们把JUnit library 添加到build path. 点击 Project-->Properties, 选择Java Build Path Libraries, Add Exteranal JARs 选中JUnit.jar 你将会看到JUnit将会出现在的屏幕上 libraries列表中。 Okay,Eclipse将强制rebuild所有的build paths.

 

我们已经准备好,开始写我们的"Hello World" . 让我们遵照TDD规范:在编码之前就建立测试。为了, 我们将假顶我们将要写的类名是HelloWorld 有一个返回字符串的方法 say().

 

要建立这样一个test, ProjectWithJUnit标题上右键, 选择New -> Other,展开"Java" 选择JUnit. 在对话框的右边一拦里选择TestCase,接着点Next. 参见图1

 

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2004-2-101312130.gif

 

1 Eclipse 中建立JUnit test   

 

     

 

Test class:一拦里输入我们需要测试的class--HelloWorld。并且给Test case取个名称--- 比如,TestThatWeGetHelloWorldPrompt(是的,这看上去太长了,但是它能很清楚表达出它的意思)  Finish完成。

 

下面是 TestThatWeGetHelloWorldPrompt.java的代码:

 

public class TestThatWeGetHelloWorldPrompt

    extends TestCase {

    public TestThatWeGetHelloWorldPrompt(

        String name) {

        super(name);

    }

    public void testSay() {

        HelloWorld hi = new HelloWorld();

        assertEquals("Hello World!", hi.say());

    }

    public static void main(String[] args) {

        junit.textui.TestRunner.run(

            TestThatWeGetHelloWorldPrompt.class);

    }

}

 

这个代码一点都不复杂,仅仅有一点点特别。 不管怎样,让我们详细的检查它。 我们继承了JUnitTestCase. (TestCase JUnitjavadoc里定义是"用来运行多个Test的固定装置") JUnit也定义了TestSuite 由于一组关联的TestCase组成, 但我们并不在这篇文章中介绍。(未完待续)。

 

测试实践:Eclipse 之 JUnit(二)

http://www.csdn.net/develop/Read_Article.asp?Id=24223

在Eclipse中使用JUnit4进行单元测试(实例篇)

四、实例总结 1. 参数化测试 有时一个测试方法,不同的参数值会产生不同的结果,那么我们为了测试全面,会把多个参数值都写出来并一一断言测试,这样有时难免费时费力,这是我们便可以采用参数化测...
  • dreamjava9213
  • dreamjava9213
  • 2014年12月15日 23:01
  • 1933

eclipse JUnit4单元测试步骤

本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函...
  • superdog007
  • superdog007
  • 2014年04月12日 09:57
  • 4542

Eclipse中高效的快捷键、调试及Junit

当我知道了这些快捷键的使用方法之后,感觉真的很兴奋,没想到Eclipse中还有这么多令人惊喜的功能,真的可以提高效率。...
  • JasonDing1354
  • JasonDing1354
  • 2014年10月31日 15:05
  • 3285

junit --Eclipse下的环境搭建

大体的步骤    创建project    添加junit包    创建一个待测试的类JDemo.java    为JDemo.java创建一个Junit测试用例JDemoTest.java ...
  • guanning0109
  • guanning0109
  • 2014年05月05日 10:59
  • 7310

Java并发测试扩展插件JunitPerf的使用

首先,不得不承认一个悲剧的事实,Junit4.0根本不支持并发测试。于是,我从网上挖掘到两个可以用于并发测试的eclipse插件。一个是GroboUtils-5,另一个是JunitPerf。由于某些原...
  • gx262091291
  • gx262091291
  • 2014年10月27日 10:06
  • 1058

Maven学习三:使用junit测试maven project

每个开发人员都会对自己的代码进行自定义的测试,可以是把项目run起来,手动点点页面按钮,看看操作场景和步骤点是否符合业务需要,是否存在UE上的问题。也有自己写几个测试类,把service类的输入输出是...
  • z69183787
  • z69183787
  • 2014年03月27日 15:58
  • 33264

Java单元测试(Junit+Mock+代码覆盖率)

单元测试是编写测试代码,用来检测特定的、明确的、细颗粒的功能。单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的。 单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复...
  • paul342
  • paul342
  • 2016年06月13日 14:09
  • 985

在Eclipse中使用JUnit进行 单元测试

在Eclipse中使用JUnit进行 单元测试     目录 1.JUnit简介... 2 2.JUnit优点... 2 3.JUnit特性... 3 4.JUnit运用... ...
  • fxy832231
  • fxy832231
  • 2016年11月07日 15:53
  • 845

在Eclipse中使用JUnit4进行单元测试(高级篇)

通过前 2 篇文章,您一定对 JUnit 有了一个基本的了解,下面我们来探讨一下 JUnit4 中一些高级特性。一、 高级 Fixture上一篇文章中我们介绍了两个 Fixture 标注,分别...
  • huangjin0507
  • huangjin0507
  • 2016年07月05日 16:06
  • 1937

Java单元测试Junit(六)使用Cobertura生成测试覆盖率报告

什么是测试覆盖率?        覆盖率是测量测试完整性的一个手段,是衡量测试是否完整的一个标准,我们编写的代码当中每个分支都应该是被覆盖的,这样才能保证测试是完全的,正确的.请留意以下例子  ...
  • chengzhezhijian
  • chengzhezhijian
  • 2016年03月21日 16:44
  • 1895
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:测试实践:Eclipse 之 JUnit(一) 转载
举报原因:
原因补充:

(最多只允许输入30个字)