开发者的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/
相关文章
|
18天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
39 1
Spring 框架:Java 开发者的春天
|
10天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
13 2
|
18天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
17天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
20 5
|
1月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
35 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
23天前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
32 1
|
24天前
|
存储 算法 Java
Java的Set集合以其严格的“不重复性”著称,使开发者既好奇又困惑
Java的Set集合以其严格的“不重复性”著称,使开发者既好奇又困惑。本文将探讨Set为何如此“挑剔”。Set接口不包含重复元素,适用于需要唯一性约束的场景。其内部通过哈希表或红黑树等数据结构和哈希算法、equals()方法来确保元素的唯一性。示例代码展示了Set如何自动过滤重复元素,体现了其高效性和便利性。
30 2
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
44 2
|
2月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
1月前
|
分布式计算 Java 大数据
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
30 0