`
andy136566
  • 浏览: 290640 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java中assertion的使用

阅读更多

      assertion的使用是一个复杂的问题,因为这将涉及到程序的风格,assertion运用的目标,程序的性质等问题。通常来说,assertion用于检查一些关键的值,并且这些值对整个程序,或者局部功能的完成有很大的影响,并且这种错误不容易恢复的。assertion表达式应该短小、易懂,如果需要评估复杂的表达式,应该使用函数计算。以下是一些使用assertion的情况的例子,这些方式可以让java程序的可靠性更高。

 

     1. 检查控制流; 在if-then-else和swith-case语句中,我们可以在不应该发生的控制支流上加上assert false语句。如果这种情况发生了,assert能够检查出来。例如:x取值只能使1,2,3,我们的程序可以如下表示

Java代码 复制代码
  1. switch (x)   
  2. {    
  3.       case 1: …;    
  4.       case 2: …;   
  5.       case 3: …;   
  6.       defaultassert false : "x value is invalid: "+x;   
  7. }  
switch (x)
{ 
      case 1: …; 
      case 2: …;
      case 3: …;
      default: assert false : "x value is invalid: "+x;
}

 

      2. 在私有函数计算前,检查输入参数是否有效;对于一私有些函数,要求输入满足一些特定的条件,那么我们可以在函数开始处使用assert进行参数检查。对于公共函数,我们通常不使用assertion检查,因为一般来说,公共函数必须对无效的参数进行检查和处理。而私有函数往往是直接使用的。
      例如:某函数可能要求输入的参数必须不为null。那么我们可以在函数的一开始加上

Java代码 复制代码
  1. assert parameter1 != null : "paramerter is null in test method";  
assert parameter1 != null : "paramerter is null in test method";

 

      3. 在函数计算后,检查函数结果是否有效;对于一些计算函数,函数运行完成后,某些值需要保证一定的性质,因此我们可以通过assert检查该值。例如,我们有一个计算绝对值的函数,那么我们就可以在函数的结果处,加上一个语句:

Java代码 复制代码
  1. assert  value >= 0:"Value should be bigger than 0:"+value;  
assert  value >= 0:"Value should be bigger than 0:"+value;

 通过这种方式,我们可以对函数计算完的结果进行检查。

 

4. 检查程序不变量;有些程序中,存在一些不变量,在程序的运行生命周期,这些不变量的值都是不变的。这些不变量可能是一个简单表达式,也可能是一个复杂的表达式。对于一些关键的不变量,我们可以通过assert进行检查。例如,在一个财会系统中,公司的支出和收入必须保持一定的平衡关系,因此我们可以编写一个表达式检查这种平衡关系,如下表示。

Java代码 复制代码
  1. private boolean isBalance() {   
  2. ……   
  3. }  
private boolean isBalance() {
……
}

 在这个系统中,在一些可能影响这种平衡关系的方法的前后,我们都可以加上assert验证:

Java代码 复制代码
  1. assert isBalance() : "balance is destoried";  

[转]http://harry.iteye.com/blog/350998

分享到:
评论

相关推荐

    在java中使用 junit单元测试

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

    使用Jmeter测试java请求

    总的来说,使用JMeter测试Java请求是性能测试中常见且重要的任务,它能帮助开发者识别和优化Java服务的性能问题,确保在高负载下仍能提供稳定的服务。在实际操作中,可能还需要结合其他工具和方法,如日志分析、监控...

    assertion-1.8.7.jar

    assertion-1.8.7.jar

    单元测试之道Java版使用JUnit

    在Java编程中,JUnit是一个广泛使用的开源测试框架,专为Java应用程序设计,它提供了丰富的API和工具,使得编写和执行单元测试变得简单、高效。本篇文章将深入探讨JUnit在Java单元测试中的应用和相关知识点。 首先...

    JAVA核心技术-卷II-源代码

    3. Assertion.java:此文件可能包含有关断言(Assertions)的代码,这是Java中的一个调试工具。断言允许程序员在代码中插入检查,以确保程序的某些条件为真。通过`assert`关键字,我们可以测试假设并在条件不满足时...

    OpenSAML示例代码(java)

    这个示例代码是使用OpenSAML 2.2.3版本构建的,包含了一个简单的Java项目,项目中使用了Ant作为构建工具。Ant是一个Java项目自动化构建工具,通过配置文件build.xml来定义构建过程,如编译源码、打包和部署等任务。 ...

    java: xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock' failed

    当你在linux中安装eclipse或者安装其他的包时遇到这样得问题:java: xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock' failed,可以按照下面步骤:第一:倒退回FC7的libx11. 卸载以下两个包的时候,可能有...

    java异常处理机制示例(java抛出异常、捕获、断言)

    4. **throws** 关键字:在方法签名中使用,表示该方法可能会抛出一个或多个异常。例如,`TryCatchTest.run`方法声明抛出`IOException`,这意味着调用此方法的代码必须处理这个异常,或者再次将它抛出。 5. **...

    北京交通大学java课件

    断言(Assertion)是一种编程技巧,用于检查代码假设是否正确,通常在开发和测试阶段使用。 【泛型】 第8章的泛型是Java SE 5.0引入的新特性,它允许在定义类、接口和方法时指定类型参数,增强了类型安全性和代码...

    编程语言JAVA断言使用.pdf

    在上述文档内容中,我们可以看到两个示例程序,它们展示了如何在Java代码中使用断言,并且涉及了在使用断言时的一些关键点。 第一个示例程序是`AssertExampleOne`类: ```java public class AssertExampleOne { ...

    Java面试中,最常被人问到的几个问题

    10. **goto关键字**:Java中虽然预留了goto关键字,但未实际使用,避免了复杂的控制流,鼓励使用结构化编程。 11. **length()方法**:数组没有length()方法,而是length属性;而String类具有length()方法,用于获取...

    saml-client_java_saml_client_

    在这个Java SAML客户端的示例中,我们重点讨论如何使用`org.opensaml`库来实现SAML功能。 `org.opensaml`是Apache Shibboleth项目的一部分,它为开发人员提供了丰富的API,可以方便地处理SAML XML文档的创建、解析...

    etlunit-assertion-3.0.6.zip

    二、Java I/O流的使用 1. 文件操作:FileInputStream和FileOutputStream用于读写文件,而FileReader和FileWriter则处理字符文件。 2. 缓冲流:BufferedInputStream、BufferedOutputStream、BufferedReader和...

    JAVA程序设计——异常和断言

    这些异常在程序设计阶段就应该考虑到,并且可以通过在方法声明中使用`throws`关键字来表明可能会抛出的异常,或者通过使用`try-catch`块来捕获和处理这些异常。例如,当尝试打开一个不存在的文件时,会抛出...

    毕业找工作最全Java面试题

    断言可以在代码中使用`assert`关键字来声明,后跟一个布尔表达式。如果该表达式的值为`false`,则触发断言错误,通常用于检测预设条件或程序不变量。 ### 7. String对象的创建与常量池 当使用`new String("xyz")`...

Global site tag (gtag.js) - Google Analytics