junit 测试中各种断言用法

转自:    http://vga.52hardware.com/market/200801/1429903.html


为什么需要单元测试


在开发软件的过程中,用户需要实际运行所编写的代码以确保程序的正确性。当软件变得越来越大,再去添加新的功能或做一些新的改动时,就很容易带来新的问题,甚至会使程序无法正常运行。然而要手动的运行代码,测试代码的可行性也是非常枯燥以及非常耗费时间的事情。

为了减少这种手动测试,可以通过创建单元测试来自动完成测试的工作。当修改代码或者添加新功能后,可以执行单元测试来保证代码运行无误。所有测试工作都是由单元测试自动完成的,开发人员所要做的就是停下来喝杯茶,看看程序的执行状态。
使用单元测试的另一个理由是实现测试驱动的开发,这在当前是比较流行的开发方式。测试驱动的开发尝试首先写出单元测试,然后完成实际的代码。通过单元测试来提供类的定义,当实际开始编写代码时,用户仅仅需要做的就是具体类的实现,只要单元测试运行通过,代码的实现也将告一段落了。写单元测试的同时,也在同时在做项目的设计,当项目结束后,单元测试还将是不错的文档,何乐而不为呢?

自信编码

人的记忆是短暂的,但代码的修改是无限的,怎样让无限的修改不会因为记忆的短暂而带来无穷的烦恼呢?这是非常矛盾的事情,单元测试能够一定程序上解决这个问题。

也许所有的程序员都遇到过这样的问题,当要修改很久以前的代码或他人编写的代码时,总是会很犹豫,因为他们不清楚所做的修改会不会引起其它的问题,只能当遍历了所有的代码后才敢动手。这是非常正常的,但也因此浪费了很多的时间,通过单元测试能够一定程度上增强用户的自信心,因为单元测试的前提假设就是,如果通过了所有的测试,代码就是可行的。

JUnit测试框架

在Java语言中,可以通过JUnit框架进行单元测试,JUnit是由“Erich Gamma”和“Kent Beck”创建的,他们也是在“设计模式”和“极限编程”领域最伟大的作者之一。

单元测试的实现是很简单的,可以认为它只是判断在某一个时刻,程序运行的值和预期的值是否一致,但在实际的应用的时候是很灵活的,在此介绍JUnit中的一些断言以及JUnit测试框架的使用,使读者能够快速的进入单元测试的领域,更快的进行开发。 断言

JUnit提供了一些辅助函数,用于帮助开发人员确定某些被测试函数是否工作正常。通常而言,把所有这些函数统称为断言,断言是单元测试最基本的组成部分。

通常每种类型的断言都有两种形式,一种包含接收一个message参数,例如“static public void assertTrue(String message, boolean condition)”,message表示出错时的提示信息,另外一个则没有message参数。

下面将分别介绍JUnit框架Assert类中的断言以及部分实现,每个函数的实现方法都为Assert类中定义的方法,读者也可以查看JUnit框架Assert类的实现代码。

assertEquals断言

这是应用非常广泛的一个断言,它的作用是比较实际的值和用户预期的值是否一样,assertEquals在JUnit中有很多不同的实现,以参数expected和actual都为Object类型的为例,assertEquals定义为:

static public void assertEquals(String message, Object expected, Object actual) {
    if (expected== null&& actual == null)
        return;
     if (expected != null&& expected.equals(actual))
        return;
     failNotEquals(message, expected, actual);
 }

其中,expected为用户期望某一时刻对象的值,actual为某一时刻对象实际的值。如果这两值相等的话(通过对象的equals方法比较),说明预期是正确的,也就是说,代码运行是正确的。assertEquals还提供了其它的一些实现,例如整数比较,浮点数的比较等等。

assertTrue与assertFalse断言

assertTrue与assertFalse可以判断某个条件是真还是假,如果和预期的值相同则测试成功,否则将失败,assertTrue的定义如下:

staticpublic void assertTrue(String message, boolean condition) {
    if (!condition) 
        fail(message); 
}

“condition”表示要测试的状态,如果“condition”的值为false,则测试将会失败。

assertNull与assertNotNull断言

assertNull与assertNotNull可以验证所测试的对象是否为空或不为空,如果和预期的相同则测试成功,否则测试失败,assertNull定义为:

staticpublic void assertNull(String message, Objectobject) { 
    assertTrue(message,object == null);
 }

其中,object就是要测试的对对象,如果object为空,该测试成功,否则失败,是不是很简单。

assertSame与assertNotSame断言

assertSame和assertEquals不同,assertSame测试预期的值和实际的值是否为同一个参数(即判断是否为相同的引用)。assertNotSame则测试预期的值和实际的值是不为同一个参数。assertSame的定义为:

static publicvoid assertSame(String message, Object expected, Object actual) {
    if (expected== actual) 
        return; 
    failNotSame(message, expected, actual);
 }



而assertEquals则判断两个值是否相等,通过对象的equals方法比较,可以相同引用的对象,也可以不同。

fail断言

“fail”断言能使测试立即失败,这种断言通常用于标记某个不应该被到达的分支。例如assertTrue断言中,condition为false时就是正常情况下不应该出现的,所以测试将立即失败,fail的定义为:

staticpublic void fail(String message) {
    throw new AssertionFailedError(message);
 }


当一个失败或者错误出现的时候,当前测试方法的执行流程将会被中止,但是位于同一个测试类中的其他测试将会继续运行。

  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Junit测试框架是一个用于 Java 编程语言的单元测试框架。Junit提供了一些注解来标记测试方法,并提供了一些断言方法来验证测试结果。以下是Junit测试框架的详细用法: 1. 创建测试类并导入Junit库 首先,需要创建一个类并使用`@RunWith`注解来指定Junit测试运行器。然后,在需要进行测试测试方法上使用`@Test`注解进行标记。同时,需要导入Junit库以使用测试框架相关的类和方法。 2. 编写测试方法 在测试编写测试方法,并使用Junit提供的断言方法来验证测试结果。Junit提供了很多种类型的断言方法,包括`assertEquals()`、`assertTrue()`、`assertFalse()`、`assertNotNull()` 等等。 3. 运行测试 使用Junit测试运行器来运行测试方法。可以使用Eclipse或者IntelliJ IDEA等IDE集成的Junit运行器来进行测试。 可以通过以下代码来示范Junit测试框架的使用: ``` import org.junit.Test; import static org.junit.Assert.assertEquals; public class CalculatorTest { @Test public void testAddition() { Calculator calculator = new Calculator(); int result = calculator.add(2, 3); assertEquals(5, result); } } ``` 在这个示例测试类`CalculatorTest`包含一个测试方法`testAddition()`。该方法用来测试加法运算是否正确实现。在该方法,创建了一个`Calculator`的实例,然后调用`add()`方法进行加法运算。最后,使用`assertEquals()`断言来验证测试结果。 Junit测试框架的使用非常简单,但是可以提高代码的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值