`

Junit学习-基础介绍

阅读更多
摘自http://huihai.iteye.com/blog/1986568

junit学习之junit的基本介绍
Junit目前在一些大的公司或者相对规范的软件中使用的比较多,相当多的小公司并没有把单元测试看的太重要。在大点的公司开发人员每天上班后,第一件事情就是从svn上把自己负责的代码checkout下来,然后运行单元测试,如果单元测试通过,那么说明自己的代码没有问题,然后就在代码块上修改与添加,完成后再用junit进行测试,测试完成后如果没有问题,那么就把相应的代码块提交给svn上。
测试一般分为:单元测试、集成测试(主要看一块代码加进去后,系统会不会有问题)、验收测试和压力测试。

在以前的的项目中也用过Junit,当时的使用只是把Junit当成一个有多个main方法的一个函数。假如一个项目非常的大,测试的东西非常的多,如果不用Junit的话,那么这个工作量是非常大的。单元测试的最基本的一个功能是能进行自动化测试。单元测试都是通过断言的方式来确定结果是否正确,即使用Assert。

1、从网站上下载junit的新版本,http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22junit%22%20AND%20a%3A%22junit%22 上下载相应的版本,这里下载的是junit4.10
2、在myeclipse中新建一个java项目,名称为junit01,并在新建一个文件夹,名称为lib,把上面下载的junit-4.10复制到里面,并build path,即添加到类路径中,如下图所示:


3、新建一个类Calcuate,其功能主要实现加减乘除,如下图所示,其所在的包为cn.whp.util


4、创建上面的类Calcuate中新建测试类,首先在myeclipse中创建一个source folder,将其命名成test,然后在其下创建一个与类Calcuate类在相同包的包,如下图所示:



5、junit3与junit4的区别还是比较明显的,在junit3中,如果某个类是测试类,必须将其继承类TestCase,如果某个方法是测试方法,必须让这个方法以testXX开头,如果希望指定某个测试方法运行之前运行某个初始化方法,这个方法的名称必须是setUp,如果希望在某个测试方法运行之后运行某个释放资源的方法,这个方法的名称必须是tearDown。
在junit4中,一个POJO类就是一个测试类,测试方法通过@Test来标识,初始化方法通过@Before来标识,释放资源的方法通过@After来标识,但是为了让junit4的测试类在junit3中也可以使用,习惯于把初始化方法命名为setUp,释放资源的方法命名为tearDown。Test中的测试方法一般以Test来开始。其中标识为Before注解的方法,每次运行测试类,都会执行标识为@After与@Before的方法。如下图所示:


6、在junit4中提供了一个Assert的类,这个类中有大量的静态方法进行断言的处理,在junit3中由于继承了TestCase,这个TestCase就可以直接assert,而junit4中需要先引入Assert类。如下图:

在上图中使用了Assert类中的assertEquals方法,这方法的第一个参数意思是:如果方法cal.add(12,22)计算的结果不为34,那么就会打印出“加法有问题”的信息。第二个参数为方法cal.add(12,22)的执行结果,第三个参数是开发人员预计的函数cal.add(12,22)执行后的结果,这里预计12与22相加后其结果为34,如果在执行测试方法后,rel不等于34,那么就会报加法有问题。如果结果等于34,那么这个方法就测试通过。把上图中最后一个参数的值34改成35,那么执行junit测试后将会出现如下错误:

如果想让上面的测试类可以在junit3中运行,可以把Assert类静态的导入,这样在调用每个静态方法时,就不用都写上Assert类了,如下图所示:

然后把所有别的测试方法补全,使用junit测试比使用main方法测试有很大的不同的,每个标识为@Test的方法都是一个可运行的方法,并且他们之间互不影响,例如testAddd方法出现问题了,并不影响testMinus方法的运行。这就是单元测试的好处,如下图:

7、在测试除法cal.divide(3,0),如果除数为0,这个方法应该会抛出异常。现在的测试目标是,如果运行测试方法后,测试方法没有抛出异常,那么这个测试方法就不能通过。这时就需要用到junit的ArithmeticException。如下图所示:


这里如果把cal.divide(20,0)改成cal.divide(20,10),这样divide是没有问题的,但是这时测试类中的testDivideException方法执行junit测试后就不能通过了,因为这个测试方法已经断言所要测试的方法divide要抛出异常,结果没有抛出异常,所以junit测试是不能通过的。如下图所示:

测试结果提示,应该抛出一个异常,结果没有抛出异常。

8、有时在测试时需要有这样的需求,就是对一个方法的时间进行测试,例如,要让一个方法,200毫秒里运行完,如果这个方法200毫秒不能运行完,那么这个方法就应该抛出异常,示例中将方法time中线程沉睡300毫秒,那么这个方法就不可能在200毫秒内完成,所以这个方法就会抛出异常。这就可以做一些方法性能上的测试,把Thread去掉,那么这个测试就可正常通过。如下图所示:


10、Junit的最基本的东西基本是这样的,断言、测试异常,捕获异常,测试方法的性能。例子代码在附件中。
分享到:
评论

相关推荐

    junit5-samples,使用junit 5的示例应用程序集合。.zip

    Junit5-Samples是一个开源项目,它为开发者提供了一个丰富的示例集合,旨在...这个开源项目对于初学者和有经验的测试人员都是宝贵的资源,不仅可以学习到最佳实践,还能了解到如何利用JUnit 5提高测试的质量和效率。

    junit-4.12-jar.rar

    - **源代码**:这个文件包含了JUnit 4.12的源代码,对于学习和理解JUnit的工作原理,或者进行扩展和调试非常有帮助。开发者可以查看源码来学习测试框架的设计模式和最佳实践。 使用这些文件,开发人员可以轻松地...

    junit4.8.2-javadoc.rar

    JUnit 4.8.2的API文档详细介绍了其提供的各种功能和用法,对于理解和使用这个版本的JUnit至关重要。通过深入学习和实践,开发者可以充分利用JUnit的强大能力,编写出高质量的测试代码,提升软件项目的可靠性和维护性...

    powermock-module-junit4-1.6.5.zip

    对于开发者来说,开源项目提供了学习、贡献和定制软件的机会,同时也促进了社区的合作与共享。 【压缩包子文件的文件名称列表】"fcrepo-mint-master" 暗示解压后的文件夹可能包含了 Fedora Commons Repository ...

    junit-4.7.jar+junit-4.7-src.jar

    JUnit 4.7 是 JUnit 系列的一个版本,它在前一个版本的基础上引入了一些新特性,以提高测试的灵活性和可读性。这个版本发布于2008年,对于当时的Java开发者来说,它提供了一个更强大的工具来确保代码的质量。 **...

    Junit文档-myecliplise

    这些断言方法构成了JUnit测试的基础。当我们运行一个JUnit测试时,它会在控制台或专用的JUnit视图中显示测试结果,通过绿色的小点表示测试通过,红色的"F"表示测试失败。 随着JUnit的发展,到了JUnit4版本,引入了...

    软件测试和JUNIT应用 - 代码包

    这些案例可能包括对URL解析、编码解码、连接建立等功能的测试,通过具体的代码示例,读者可以学习如何编写和组织JUnit测试,以及如何利用它来提升代码质量。 总结来说,软件测试是保障软件质量的重要手段,而JUnit...

    Junit学习.rar

    这个“Junit学习.rar”压缩包显然包含了关于JUnit从3.8到4.9版本的学习资料,包括可能的操作手册、教程文档以及个人的学习笔记。以下是基于这些资源可能涵盖的一些关键知识点: 1. **JUnit基础知识**:了解JUnit的...

    JUnit5-Test:JUnit5-简单测试

    JUnit Platform为运行测试提供了基础架构,而JUnit Jupiter是编写和执行测试的新API,JUnit Vintage则允许在JUnit5环境中运行JUnit4的测试。 2. **注解(Annotations)**: - `@Test`:用于标记测试方法,可以包含...

    Junit5.7.2离线jar

    JUnit Platform是整个框架的基础,提供了一个启动和运行测试的通用引擎,兼容多种测试框架。JUnit Jupiter是JUnit5的核心,负责定义新的API和注解,如@Test、@BeforeEach、@AfterEach等,用于编写测试用例。JUnit ...

    junit5-the-platform:有关“ JUnit 5-平台”的演示示例

    通过研究 `junit5-the-platform-master` 中的代码,开发者可以深入了解 JUnit 5 平台的工作原理,并学习如何创建自定义的测试引擎,这对于开发定制化测试解决方案或者扩展现有测试框架非常有帮助。同时,熟悉 JUnit ...

    Junit-3.8.1 src

    学习`Junit-3.8.1`源码有助于理解测试框架的设计模式,比如观察者模式、工厂模式等,同时也为过渡到更现代的JUnit版本提供了基础。尽管JUnit 3.8.1已经比较老旧,但它仍然是理解测试基础和测试驱动开发的一个良好...

    junit-3.8.1.rar

    理解并熟练使用JUnit 3.8.1对于任何Java开发者来说都是必要的,它不仅能够帮助我们确保代码质量,也是学习单元测试和TDD思想的起点。即使在新的版本出现后,旧版本的知识仍然具有其历史价值和参考意义。通过解压并...

    junit-4.4包+源码

    JUnit是Java编程语言中最常用的单元测试框架之一,它是由Ernst魔鬼和Kent Beck开发的,...通过学习和使用,开发者可以更好地掌握测试驱动开发(TDD)的理念,提升软件质量,并为持续集成和自动化测试打下坚实的基础。

    dm-junit-sample.7z

    本篇将详细探讨"dm-junit-sample"项目,这是一个基于Junit框架的测试示例,旨在教授如何构建一个有效的金字塔测试结构,包含冒烟测试等基础测试策略。通过深入理解并应用这些概念,开发者可以提升测试效率,减少错误...

    allure-junit-adaptor-1.2.4.zip

    微框架通常是为了简化Web应用开发而设计的,它们提供基础功能,如路由、模板引擎和数据库交互,但保持小巧、易于理解和使用。Webulizor可能是用某种编程语言(如Python、Node.js或Java)实现的,其目标是帮助开发者...

    junit-4.11 jar包、源文件、操作文档

    - **org.junit.framework** 包:提供了测试框架的基础结构,如`TestSuite`用于组合多个测试。 3. **操作文档**: 这部分文档可能包含了关于如何安装、配置以及使用JUnit 4.11的详细指南。通常会解释如何在IDE(如...

    JUnit 入门教程 - v1.01

    3. **JUnit - 测试框架**:这里将深入讲解 JUnit 测试框架的基础架构,包括测试注解(如 `@Test`)、测试套件(`@Suite`)和测试监听器(`TestListener`)。这些元素是如何协同工作以执行和报告测试结果的。 4. **...

    Junit-3.8.1 bin

    总之,"Junit-3.8.1 bin"是对早期Java开发中一个关键测试工具的封装,对于了解测试基础和学习测试驱动开发有重要价值。不过,随着技术的发展,现在更多地推荐使用更新的JUnit版本,以便利用其更先进的功能和更好的...

Global site tag (gtag.js) - Google Analytics