JUnit单元测试框架

JUnit

java编程语言的单元测试框架

为什么需要单元测试

在平时的开发当中,一个项目往往包含了大量的方法,可能有成千上万个。如何去保证这些方法产生的结果是我们想要的呢?当然了,最容易想到的一个方式,就是我们通过System.out来输出我们的结果,看看是不是满足我们的需求,但是项目中这些成千上万个方法,我们总不能在每一个方法中都去输出一遍嘛。这也太麻烦了。这时候用我们的单元测试框架junit就可以很好地解决这个问题。

junit如何解决这个问题的呢?答案在于内部提供了一个**断言(函数)**机制,他能够将我们预期的结果和实际的结果进行比对,判断出是否满足我们的期望。

环境配置

多数开发环境已经集成JUnit作为单元测试的工具

在eclipse中使用JUnit

注解

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。

Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。

JUnit进行单元测试需要遵循的规则

以Calculator类为例

1、每一个测试方法上使用@Test进行修饰

2、每一个测试方法必须使用public void 进行修饰

3、每一个测试方法不能携带参数

4、测试代码和源代码在两个不同的项目路径下

5、测试类的包应该和被测试类保持一致

6、测试单元中的每个方法必须可以独立测试

JUnit进行单元测试的建议

以Calculator类为例

1.类名以Test结尾,表明这是一个测试类

2.方法名加上test前缀,表明这是一个测试方法

断言

JUnit为我们提供了一些辅助函数,他们用来帮助我们确定被测试的方法是否按照预期的效果正常工作,通常,把这些辅助函数称为断言。

1、assertEquals

函数原型

​ assertEquals([String message],expected,actual)

参数说明:

​ message是个可选的消息,假如提供,将会在发生错误时报告这个消息。

​ expected是期望值,通常都是用户指定的内容。

​ actual是被测试的代码返回的实际值。

2、assertTrue

函数原型:

​ assertTrue ([String message],Boolean condition)

参数说明:

​ message是个可选的消息,假如提供,将会在发生错误时报告这个消息。

condition是待验证的布尔型值。

常用注解和运行流程

参照JunitFlowTest

@Test

在junit3中,是通过对测试类和测试方法的命名来确定是否是测试,且所有的测试类必须继承junit的测试基类。在junit4中,定义一个 测试方法变得简单很多,只需要在方法前加上@Test就行了。

注意:测试方法必须是public void,即公共、无返回数据。可以抛出异常。

@BeforeClass

当我们运行几个有关联的用例时,可能会在数据准备或其它前期准备中执行一些相同的命令,这个时候为了让代码更清晰,更少冗余,可以将公用的部分提取出来,放在一个方法里,并为这个方法注解@BeforeClass。意思是在测试类里所有用例运行之前,运行一次这个方法。例如创建数据库连接、读取文件等。

注意:方法名可以任意,但必须是public static void,即公开、静态、无返回。这个方法只会运行一次。

@AfterClass

跟@BeforeClass对应,在测试类里所有用例运行之后,运行一次。用于处理一些测试后续工作,例如清理数据,恢复现场。

注意:同样必须是public static void,即公开、静态、无返回。这个方法只会运行一次。

@Before

与@BeforeClass的区别在于,@Before不止运行一次,它会在每个用例运行之前都运行一次。主要用于一些独立于用例之间的准备工作。比如两个用例都需要读取数据库里的用户A信息,但第一个用例会删除这个用户A,而第二个用例需要修改用户A。那么可以用@BeforeClass创建数据库连接。用@Before来插入一条用户A信息。

注意:必须是public void,不能为static。不止运行一次,根据用例数而定。

@After

与@Before对应。

@Ignore

有时候我们想暂时不运行某些测试方法\测试类,可以在方法前加上这个注解。在运行结果中,junit会统计忽略的用例数,来提醒你。但是不建议经常这么做,因为这样的坏处时,容易忘记去更新这些测试方法,导致代码不够干净,用例遗漏。

你可能感兴趣的:(java,单元测试,java,eclipse)