java测试类的创建方法_java编写一个类

java测试类的创建方法_java编写一个类JUnit基础及第一个单元测试实例(JUnit3.8)JUnit基础及第一个单元测试实例(JUnit3.8) 单元测试  单元测试(unittesting) ,是指对软件中的最小可测试单元进行检查和验证。  单元测试不是为了证明您是对的,而是为了证明您没有错误。  单元测试主要是用来判断程序的执行结果与自己期望的结果是否一致。  关键是

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

JUnit基础及第一个单元测试实例(JUnit3.8)

JUnit基础及第一个单元测试实例(JUnit3.8)

 

单元测试

  单元测试(unit testing) ,是指对软件中的最小可测试单元进行检查和验证。

  单元测试不是为了证明您是对的,而是为了证明您没有错误。

  单元测试主要是用来判断程序的执行结果与自己期望的结果是否一致。

  关键是在于所用的测试用例(Test Case) 。

 

JUnit

  JUnit是一个Java语言的单元测试框架。

  项目主页:http://junit.org/

  Java的很多IDE,比如Eclipse集成了JUnit,只需要在build path中添加Library并选择想用的版本即可。

  JUnit的两种主要版本是JUnit 3.8JUnit 4,前者使用反射,后者使用反射和注解。

  博文回顾:本博客上次介绍JUnit的时候是在反射和注解之后:

  http://www.cnblogs.com/mengdd/archive/2013/02/02/2890204.html

  

结合实例来说明单元测试的用法:

1.编写目标类源代码

  新建一个项目,起名叫JUnitTest,首先编写一个目标类Calculator:

复制代码
package com.mengdd.junit;

public class Calculator
{
    public int add(int a, int b)
    {
        return a + b;
    }
    
    public int subtract(int a, int b)
    {
        return a - b;
    }
    
    public int multiply(int a, int b)
    {
        return a * b;
    }

    public int divide(int a, int b)
    {
        return a / b;
    }
}
复制代码

 

2.添加JUnit库

  然后为了使用JUnit,需要加入库:

  右键选择项目Properties->左侧Java Build Path->标签Libraries->Add Library…

java测试类的创建方法_java编写一个类

  弹出的对话框中选JUnit,然后Next,再选择JUnit 3或者JUnit 4.

  本文示例选择JUnit 3。

 

3.创建测试类

  这里需要注意以下几点:

  1.使用JUnit的最佳实践:源代码和测试代码需要分开。

  所以可以新建一个名叫test的source folder,用于存放测试类源代码。这样在发布程序的时候测试类的程序就可以丢掉了。

  但是这两个文件夹中的类编译出的class文件都会在同一个bin文件夹中。

  2.测试类和目标源代码的类应该位于同一个包下面,即它们的包名应该一样。

  这样测试类中就不必导入源代码所在的包,因为它们位于同一个包下面。

  3.测试类的命名规则

  在要测试的类名之前或之后加上Test。

  此步骤完成后项目目录如下:

  java测试类的创建方法_java编写一个类

 

4.测试类代码编写

  测试类必须继承于TestCase类。

  TestCase文档说明:

public abstract class TestCase
extends Assert
implements Test

A test case defines the fixture to run multiple tests.

To define a test case
1) implement a subclass of TestCase
2) define instance variables that store the state of the fixture
3) initialize the fixture state by overriding setUp
4) clean-up after a test by overriding tearDown.
Each test runs in its own fixture so there can be no side effects among test runs.

  (本文最后参考资料中会给出JUnit文档的网盘链接,有需要可下载)

  还有一个很重要的Assert类,参见文档,全是static void方法。

对于测试类中方法的要求:

  在JUnit 3.8中,测试方法需要满足如下原则:

  1.public的。

  2.void的。

  3.无方法参数。

  4.方法名称必须以test开头。 (它通过反射找出所有方法,然后找出以test开头的方法)。

 

Test Case之间一定要保持完全的独立性,不允许出现任何的依赖关系。

  删除一些方法后不会对其他的方法产生任何的影响。

  我们不能依赖于测试方法的执行顺序。

 

综上,编写代码如下:

复制代码
package com.mengdd.junit;

import junit.framework.Assert;
import junit.framework.TestCase;

public class CalculatorTest extends TestCase
{
    public void testAdd()
    {
        Calculator calculator = new Calculator();
        int result = calculator.add(1, 2);
        // 判断方法的返回结果
        Assert.assertEquals(3, result);// 第一个参数是期望值,第二个参数是要验证的值
    }

    public void testSubtract()
    {
        Calculator calculator = new Calculator();
        int result = calculator.subtract(1, 2);
        // 判断方法的返回结果
        Assert.assertEquals(-1, result);// 第一个参数是期望值,第二个参数是要验证的值

    }

    public void testMultiply()
    {
        Calculator calculator = new Calculator();
        int result = calculator.multiply(2, 3);
        // 判断方法的返回结果
        Assert.assertEquals(6, result);// 第一个参数是期望值,第二个参数是要验证的值

    }

    public void testDivide()
    {
        Calculator calculator = new Calculator();
        int result = calculator.divide(12, 3);
        // 判断方法的返回结果
        Assert.assertEquals(4, result);// 第一个参数是期望值,第二个参数是要验证的值

    }


}
复制代码

 

  运行一下:右键选择该类,Run As->JUnit Test

 java测试类的创建方法_java编写一个类

  (可以在此处右键选择Run重复运行)

  JUnit的口号:Keep the bar green to keep the code clean.

 

5.代码重构:setUp()方法的使用

  有一个原则:DRY(Don’t Repeat Yourself)

  所以对代码进行重构,将重复的生成对象的部分放在setUp()方法中。

  (重写的时候将protected变为public,继承的时候扩大访问范围是没有问题的。)

  先进行一个方法的测试测试:

  在CalculatorTest类中加入代码如下:

复制代码
    @Override
    public void setUp() throws Exception
    {
        System.out.println("set up");
    }
    
    @Override
    public void tearDown() throws Exception
    {
        System.out.println("tear down");
    }
复制代码

 

  再次运行后发现Console中输出如下:

java测试类的创建方法_java编写一个类

  说明这两个方法执行了多次。

 

  在每个测试用例之前执行setUp(),每个测试用例执行之后,tearDown()会执行。

  即对于每个测试用例,执行顺序为:

  1.setUp()

  2.testXXX()

  3.tearDown()

 

  重构:使用成员变量生成对象(为了能在每个方法中都用到),将生成对象的语句放在setUp()中,注意这里为每一个测试用例都会生成新的对象

  重构后代码如下:

 

复制代码
package com.mengdd.junit;

import junit.framework.Assert;
import junit.framework.TestCase;

public class CalculatorTest extends TestCase
{

    private Calculator calculator = null;

    @Override
    public void setUp() throws Exception
    {
        System.out.println("set up");
        // 生成成员变量的实例
        calculator = new Calculator();
        System.out.println(calculator);
    }

    @Override
    public void tearDown() throws Exception
    {
        System.out.println("tear down");
    }

    public void testAdd()
    {
        int result = calculator.add(1, 2);
        // 判断方法的返回结果
        Assert.assertEquals(3, result);// 第一个参数是期望值,第二个参数是要验证的值
    }

    public void testSubtract()
    {
        int result = calculator.subtract(1, 2);
        // 判断方法的返回结果
        Assert.assertEquals(-1, result);// 第一个参数是期望值,第二个参数是要验证的值

    }

    public void testMultiply()
    {
        int result = calculator.multiply(2, 3);
        // 判断方法的返回结果
        Assert.assertEquals(6, result);// 第一个参数是期望值,第二个参数是要验证的值

    }

    public void testDivide()
    {
        int result = calculator.divide(12, 3);
        // 判断方法的返回结果
        Assert.assertEquals(4, result);// 第一个参数是期望值,第二个参数是要验证的值

    }


}
复制代码

 

  运行后控制台输出:

java测试类的创建方法_java编写一个类

   说明每一个测试的方法前后都会有setUp()和tearDown()方法的调用,所以每次生成的都是一个新的对象,各个方法之间没有干扰

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180901.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深入浅出PID控制算法(一)————连续控制系统的PID算法及MATLAB仿真[通俗易懂]

    深入浅出PID控制算法(一)————连续控制系统的PID算法及MATLAB仿真[通俗易懂]引言PID是Proportional(比例)、Integral(积分)、Differential(微分)三者的缩写。PID调节是连续控制系统中技术最成熟、应用最广泛的调节方式。PID调节实质是根据输入的偏差值,按照比例、积分、微分的函数关系进行运算,运算结果用以控制输出。之前在项目中也用到过不少PID的算法,但大多属于一知半解的状态,或者胡乱调节的程度,最近在学习的过程偶然对PI…

    2022年6月6日
    65
  • Server SAN_Windows存储卷设备

    Server SAN_Windows存储卷设备目前,实现云环境中数据的高效存储是云计算提供服务的基本要求。云计算和云存储已经成为提供信息和在线功能的首选方法。云计算和云存储已经成为解决普通IT问题和挑战的热门话题。以数据中心网络为基础的分布式存储是构建云计算的物理实体。通常熟知的存储设备是和计算机主板I/O接口(如IDE、SCSI)相连接的硬盘,由本机操作系统负责读写及管理,这是传统的数据存储技术,称为DAS(直接附加存储)。如果添加网络,可以实现文件共享,这是基于局域网(IP)的文件共享设备,能消除对多个文件服务器的需求。存储作为云计算提供I

    2025年7月10日
    3
  • python去除扩展名

    python去除扩展名python去除扩展名

    2022年9月22日
    1
  • MATLAB 绘制折线图

    MATLAB 绘制折线图MATLAB绘制折线图想要绘制出如上图所示折线图,首先,先展示代码:x=0:10:50;a=[0,1.80,7.60,17.40,31.20,49.00]plot(x,a,’s-g’,’MarkerSize’,2,’MarkerFaceColor’,’g’,’MarkerEdgeColor’,’g’,’LineWidth’,2);gridb=[0,1.10,4.20,9.30,1…

    2022年6月14日
    51
  • Java的运行机制(一)

    Java的运行机制(一)前言:还是那句话,第一、凡是涉及到概念性内容的时候,我都会到官网去确认内容的真实性!第二、我喜欢偏向于原理学习。在java介绍里面,我认为知道这是一门完全面向对象的语言就足够了。我的导师说C++是认为程序员是很强大的,开放了所有的功能权限;Java是认为程序员不是那么全能的,有些危险的操作,不会让你执行。不知道您是否也这么认为呢?目录一、类的结构二、运行机制1、编译方式…

    2022年7月8日
    24
  • 转一篇难得的好文章-CPU流水线的探秘之旅

    转一篇难得的好文章-CPU流水线的探秘之旅作为程序员,CPU在我们的工作中扮演了核心角色,因此了解处理器内部的工作方式对程序员来说不无裨益。  CPU是如何工作的呢?一条指令执行需要多长时间?当我们讨论某个新款处理器拥有12级流水线还是18级流水线,甚至是更深的31级流水线时,这到些都意味着什么呢?  应用程序通常会将CPU看作是黑盒子。程序中的指令按照顺序依次进入CPU,执行完之后再按顺序依次从C

    2022年8月20日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号