开发者的Java测试用例浅析

前段时间,在项目组里做了一点java测试用例,虽然没有全自动化,也完成了半自动化的测试。比如:针对接口的测试,提供服务的测试等,都不需要启动服务,也不需要接口准备好。我们只需要知道输入输出,便可以进行testcase的编写,这样很方便。我们这边这次完成的针对某一块业务。

  看一下一部分的完成情况

  这次的主要目的还是来讲TestCase

  那什么是TestCase?

  是为了系统地测试一个功能而由测试工程师写下的文档或脚本;

  Junit测试是程序员测试,即白盒测试(个人理解);

  具体到junit.framework. TestCase这个抽象类

  其实网上有很多关于这方面的帖子,博客之类的,大家也可以找找,学习学习。毕竟我这里的理解还是很肤浅的

  那第二点,为什么需要编写测试用例?

  通俗易懂一点:写的目的就是为了记录,并加以完善,因为测试一个功能往往不是走一遍就OK的,需要反复的改,反复的测,直到功能可以提交给客户。

  深度提炼一点:

  1) 测试用例被认为是要交付给顾客的产品的一部分。测试用例在这里充当了提高可信度的作用。典型的是UAT(可接受)级别。

  2) 测试用例只作为内部使用。典型的是系统级别的测试。在这里测试效率是目的。在代码尚未完成时,我们基于设计编写测试用例,以便一旦代码准备好了,我们就可以很快地测试产品。

  具体的参考:http://www.51testing.com/html/41/n-44641.html

  深入的也不多说,网上这种东西很多。

  正题:

  使用JUnit时,主要都是通过继承TestCase类别来撰写测试用例,使用testXXX()名称来撰写单元测试

  用JUnit写测试真正所需要的就三件事:

  1.  一个import语句引入所有junit.framework.*下的类。

  2.  一个extends语句让你的类从TestCase继承。

  3.  一个调用super(string)的构造函数。

  下面可以看一下TestCase的文档介绍里的Example

  1.构建一个测试类

  public class MathTest extends TestCase {

  protected double fValue1;

  protected double fValue2;

  protected void setUp() {

  fValue1= 2.0;

  fValue2= 3.0;

  }

  }

  2.一个Test方法以及断言使用

  public void testAdd() {

  double result= fValue1 + fValue2;

  assertTrue(result == 5.0);

  }

  3.运行单个方法的使用

  TestCase test= new MathTest("add") {

  public void runTest() {

  testAdd();

  }

  };

  test.run();

  或者

  TestCase test= new MathTest("testAdd");

  test.run();

4.运行一组测试用例

  public static Test suite() {

  suite.addTest(new MathTest("testAdd"));

  suite.addTest(new MathTest("testDividByZero"));

  return suite;

  }

  还有下面这种方式

  public static Test suite() {

  TestSuite suite = new TestSuite("Running all tests.");

  /*10000*/

  suite.addTestSuite(TestAgentApi.class);

  /*10001*/

  suite.addTestSuite(TestAgentUxxApi.class);

  }

  运行6个,5个没有通过,一目了然。

  setUp和tearDown


/**

* Sets up the fixture, for example, open a network connection.

* This method is called before a test is executed.

*/

protected void setUp() throws Exception {

}

/**

* Tears down the fixture, for example, close a network connection.

* This method is called after a test is executed.

*/

protected void tearDown() throws Exception {

}

  对于重复出现在各个单元测试中的运行环境,可以集中加以管理,可以在继承TestCase之后,重新定义setUp()与tearDown()方法,将数个单元测试所需要的运行环境在setUp()中创建,并在tearDown()中销毁。

  Junit提供的种种断言

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

  方法:

  assertEquals-期望值与实际值是否相等

  assertFalse-布尔值判断

  assertTrue-布尔值判断

  assertNull-对象空判断

  assertNotNull-对象不为空判断

  assertSame-对象同一实例判断

  assertNotSame-检查两个对象是否不为同一实例

  fail-使测试立即失败

  Junit和异常

  1.从测试代码抛出的可预测异常。

2.由于某个模块(或代码)发生严重错误,而抛出的不可预测异常。

  这两点的异常是我们比较关心的。下面展示一种情况:对于方法中每个被期望的异常,都应写一个专门的测试来确认该方法在应该抛出异常的时候确实会抛出异常。图展示的是抛出异常才通过,不抛出异常,case不通过。

  如图

  异常情况如下:

  对于处于出乎意料的异常,我们最好简单的改变我们的测试方法的声明让它能抛出可能的异常。JUnit框架可以捕获任何异常,并且把它报告为一个错误,这些都不需要你的参与。

  回顾一下如何使用Junit

  JUnit的使用非常简单,共有3步:

  第一步、编写测试类,使其继承TestCase;

  第二步、编写测试方法,使用testXXX的方式来命名测试方法;

  第三步、编写断言。

  如果测试方法有公用的变量等需要初始化和销毁,则可以使用setUp,tearDown方法。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-20 10:41:54

开发者的Java测试用例浅析的相关文章

软件测试-java测试用例的编写,难度是如何的

问题描述 java测试用例的编写,难度是如何的 java测试用例的编写 能否举个简单的例子呢 其他编程语言的测试用例是如何编写的 测试用例的本质是神马呢 解决方案 测试本质就是写一些代码来调用你编写的函数,给出测试用的参数,看返回值是否符合预期,从而判断代码是否有错误. 测试用例就是用来测试的输入数据,每组数据是一个测试用例. 编写测试用例的原则是尽量提高代码分支覆盖率和代码路径覆盖率,测试各种典型和边界数据.比如如下函数: void foo(int i, int j) { if (i > 0)

mongodb的java测试用例

本测试用例包括:查询数据库.查询聚类集合.查询数据.添加数据.添加多条数据.删除数据.修改数据操作,更多操作请使用者以此类推. 完整工程下载地址:http://download.csdn.net/detail/linyu19872008/6913607 工程目录结构如图: mongodb数据库管理类: import com.mongodb.Mongo; /** * mongodb管理器 * * @author jacklin * */ public class MongodbManager {

Oracle 提醒开发者,Java applets 将不受浏览器支持

近日,Oracle 产品博客发文表示,Safari 和 Firefox 也将停止支持 Java Applet,建议那些还在产品代码中使用 Java applets 的开发者尽快寻找新的替代方案. 大约一年前,Oracle 就曾宣布计划在 JDK 9 中废弃 Java 浏览器插件,因为浏览器供应商不再使用基于标准的 NPAPI 插件支持技术来启动 Java Applet.从那时起,Oracle 开发团队发布了一个 JDK 增强建议(JEP 289:废弃 Applet API),其中包含有关 JDK

Java编码浅析(注意区分三个概念)(转)

编码: (1)外部资源的字符集-----没有读入jvm中的数据都是外部资源 (2)jvm中数据的字符集-----都是unicode (1)和(2)之间发生交互时,如果不指定编码,则使用JVM平台默认字符集     Java与Unicode:   Java的class文件采用utf8的编码方式,JVM运行时采用utf16.   Java的字符串是unicode编码的.   总之,Java采用了unicode字符集,使之易于国际化.   Java支持哪些字符集:   即Java能识别哪些字符集并对它

ZooKeeper Watch Java API浅析getData

        Watch是ZooKeeper中非常重要的一个机制,它可以监控ZooKeeper中节点的变化情况,告知客户端.下面,我们以代码为例来分析Watch在ZooKeeper中是如何实现的.ZooKeeper中一共由三种方法可以实现Watch,分别为getData.exists和getChildren,今天我们先来看下getData()方法:         1.getData() import java.io.IOException; import org.apache.zookeep

ZooKeeper Watch Java API浅析getChildren

        Watch是ZooKeeper中非常重要的一个机制,它可以监控ZooKeeper中节点的变化情况,告知客户端.下面,我们以代码为例来分析Watch在ZooKeeper中是如何实现的.ZooKeeper中一共由三种方法可以实现Watch,分别为getData.exists和getChildren,今天我们先来看下getChildren()方法:         3.getChildren import java.io.IOException; import org.apache.z

ZooKeeper Watch Java API浅析exists

        Watch是ZooKeeper中非常重要的一个机制,它可以监控ZooKeeper中节点的变化情况,告知客户端.下面,我们以代码为例来分析Watch在ZooKeeper中是如何实现的.ZooKeeper中一共由三种方法可以实现Watch,分别为getData.exists和getChildren,今天我们先来看下exists()方法:         2.exists() import java.io.IOException; import org.apache.zookeeper

Java开发者的福音:使用 Visual Studio Code 调试 Java 应用程序

对于使用 Visual Studio Code 的 Java 开发者来说,Language Support for Java(TM) by Red Hat 扩展提供了非常好的语言特性支持,比如智能感知和项目支持等.然而,我们也听到一些用户反馈需要调试 Java 程序.今天,我们万分激动地宣布,我们与 Red Hat 合作开发了能让开发者调试 Java 应用程序的轻量级扩展:Java Debugger for Visual Studio Code,它基于 Java Debug Server. 注意

浅析Java异常处理中断言的使用_java

断言的概念 断言用于证明和测试程序的假设,比如"这里的值大于 5". 断言可以在运行时从代码中完全删除,所以对代码的运行速度没有影响.断言的使用 断言有两种方法: 一种是 assert<<布尔表达式>> : 另一种是 assert<<布尔表达式>> :<<细节描述>>. 如果布尔表达式的值为false , 将抛出AssertionError 异常: 细节描述是AssertionError异常的描述文本使用 java