软件工程头歌实训作业:Junit实训入门篇

embedded/2024/12/2 23:24:34/

第1关:第一个Junit测试程序

 

任务描述


请学员写一个名为testSub()的测试函数,来测试给定的减法函数是否正确。

相关知识


Junit编写原则
1、简化测试的编写,这种简化包括测试框架的学习和实际测试单元的编写。
2、测试单元保持持久性。
3、利用既有的测试来编写相关的测试。

Junit特征
1、使用断言方法判断期望值和实际值差异,返回Boolean值。
2、测试驱动设备使用共同的初始化变量或者实例。
3、测试包结构便于组织和集成运行。
4、支持图形交互模式和文本交互模式。

Junit框架的组成
1、测试用例(TestCase):对测试目标进行测试的方法与过程的集合
2、测试包(TestSuite):测试用例的集合,可容纳多个测试用例(TestCase)。
3、测试结果(TestResult):测试结果的描述与记录。
4、测试监听(TestListener):测试过程中事件的监听者。
5、测试失败元素(TestFailure):每一个测试方法所发生的与预期不一致状况的描述。
6、测试框架出错异常(AssertionFailedError):junit执行测试时所抛出的异常。

Junit作用介绍
  通常我们写完代码想要测试这段代码的正确性,那么必须新建一个类,然后创建一个 main() 方法,之后再编写测试代码。如果需要测试的代码很多呢?那么要么就会建很多main() 方法来测试,要么将其全部写在一个main()方法里面。这也会大大的增加测试的复杂度,降低程序员的测试积极性。而 Junit 能很好的解决这个问题,简化单元测试,写一点测一点,在之后的代码改动中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。

如何编写Junit测试
首先,我们将介绍一个测试类:Calculate.java

//Calculate.java
package com.trustie.junitest;
public class Calculate {
    public int sum(int var1, int var2) {
        return var1 + var2;
    }
}


  在上面的代码中,我们可以看到,Calculate类有一个公共的方法sum(), 它接收输入两个整数,将它们相加并返回结果。在这里,我们将测试这个方法。为了这个目的,我们将创建另一个类及其方法,将测试之前的类(在此情况下,我们只有一个方法进行测试)中的方法,这是使用的最常见的方式。当然,如果一个方法非常复杂且要扩展,我们可以用多个试验方法来对其进行测试。创建测试用例的详细信息将显示在下面的部分。下面,有一个类是:CalculateTest.java,它具有我们的测试类的角色的代码:

//CalculateTest.java
package com.trustie.test;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import com.trustie.junitest.Calculate;
public class CalculateTest {
  Calculate calculation = new Calculate();
  int sum = calculation.sum(2, 5);
  int testSum = 7;
  @Test
  public void testSum() {
      assertEquals(sum, testSum);
  }
}


先来解释一下上面的代码。首先,我们可以看到,有一个@Test的注解在 testSum()方法的上方。 这个注释指示该方法它所附着的代码可以做为一个测试用例。因此,testSum()方法将用于测试公开方法 sum() 。 我们再观察一个方法 assertEquals(sum, testsum)。 assertEquals ([String message], object expected, object actual) 方法持有两个对象作为输入,并断言这两个对象相等。

然后在Bash执行:

javac -d . Calculate.java
javac -d . CalculateTest.java
java org.junit.runner.JUnitCore com.trustie.test.CalculateTest
就可以看到:

JUnit version 4.12
.
Time: 0.003
OK (1 test)
这里首先打印出了JUnit版本号,然后输出了耗时和测试结果。在这里,我们的测试结果是OK,证明测试通过,原函数功能正确。

编程要求


本关的编程任务是在JunitSubTest.java中的补全测试函数testSub(),具体要求:用sub和testSub作为参数,来验证JunitSub.java中sub函数是否正确的是否正确。

本关涉及的代码文件JunitSub.java的代码如下:

package step1;
public class JunitSub {
    public int sub(int var1, int var2) {
        return var1 - var2;
    }
}
本关涉及的代码文件JunitSubTest.java的代码如下:

package step1;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import step1.JunitSub;
public class JunitSubTest {
     //引入JunitSub对象
     JunitSub js = new JunitSub();
     int sub = js.sub(5,2);
     int testSub = 3;
     /*
     请在下面的Begin/End内写一个测试函数,
     来验证JunitSub中的sub函数编写是否正确
     */
     /***********************Begin**************************/
     /************************End***************************/
}


评测说明
本关卡的测试文件是TestRunner.java,该文件进行了函数封装且学员不可见,用于验证学员的Junit测试代码是否正确。

具体测试过程如下:

1.平台自动编译生成TestRunner.exe;
2.平台运行TestRunner.exe;
3.获取TestRunner.exe输出,并将其输出与预期输出对比:如果一致则测试通过,否则测试失败。

预期输入:


预期输出:true

友情提示

1.请不要直接println最终输出,否则平台发现此类情况后,将一律扣掉本关经验值,并且追加处罚措施。

2.学员答题时请尽量手敲代码,请勿从实训讲解代码片段中复制代码段粘贴到答题区域作答,复制的内容会保留一些格式和字符,导致编译失败。

开始你的任务吧,祝你成功!

补充代码:

package step1;import org.junit.Test;
import static org.junit.Assert.assertEquals;
import step1.JunitSub;public class JunitSubTest {//引入JunitSub对象JunitSub js = new JunitSub();int sub = js.sub(5,2);int testSub = 3;/*请在下面的Begin/End内写一个测试函数,来验证JunitSub中的sub函数编写是否正确*//***********************Begin**************************/@Testpublic void testSubFunction() {assertEquals(testSub, sub);}/************************End***************************/}


http://www.ppmy.cn/embedded/142446.html

相关文章

20241128解决Ubuntu20.04安装libesd0-dev异常的问题

20241128解决Ubuntu20.04安装libesd0-dev异常的问题 2024/11/28 16:36 缘起:中科创达的高通CM6125开发板的Android10的编译环境需要。 安装异常:rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ sudo apt-get install libesd0-dev Readi…

第七章selinux----第八章防火墙

1、selinux的说明 SELinux是Security-Enhanced Linux的缩写,意思是安全强化的linux。 SELinux 主要由美国国家安全局(NSA)开发,当初开发的目的是为了避免资源的误用。 系统资源都是通过程序进行访问的,如果将 /var/ww…

Vue.js 深入探索:自定义指令与插件开发

Vue.js 是一个轻量级、易于上手的前端框架,但它的灵活性和强大功能远不止于此。Vue 提供了丰富的内置指令(如 v-bind、v-if、v-for 等)和组件系统,然而,Vue 的真正魅力在于其高度可扩展的设计。你可以通过创建 自定义指…

九、Spring Boot集成Spring Security之授权概述

文章目录 往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口前言一、授权概述二、用户权限三、用户授权流程三、Spring Security授权方式1、请求级别授权2、方法级别授权 往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口 Spr…

MySQL —— 配置文件

前一篇文章:MySQL —— MySQL 程序-CSDN博客 目录 前言 一、使用方法 二、配置文件位置及加载顺序 1.在 Windows 系统中读取配置文件 2.在 Linux 系统中读取配置文件 三、配置文件语法 四、案例:设置客户端全局编码格式 总结 前言 本篇文章要介…

大模型开发和微调工具Llama-Factory-->数据处理

数据处理 dataset_info.json 包含了所有经过处理的 本地数据集 和 在线数据集。如果使用本地数据集, 务必在 dataset_info.json 中添加对应数据集及其内容的定义 目前支持 Alpaca 格式 和 ShareGPT 的格式 1.Alpaca 针对不同任务,数据集格式要求如下…

数据资产管理是什么?为什么重要?核心组成部分(分类分级、登记追踪、质量管理、安全合规)、实施方法、未来趋势、战略意义

文章目录 一、引言:数据的新时代二、什么是数据资产管理?2.1 定义2.2 核心功能 三、为什么数据资产管理至关重要?3.1 面对的数据管理挑战 四、数据资产管理的核心组成部分4.1 数据分类与分级4.2 数据资产登记与追踪4.3 数据质量管理4.4 数据安…

kafka数据在服务端时怎么写入的

学习背景 接着上篇,我们来聊聊kafka数据在服务端怎么写入的 服务端写入 在介绍服务端的写流程之前,我们先要理解服务端的几个角色之间的关系。 假设我们有一个由3个broker组成的kafka集群,我们在这个集群上创建一个topic叫做shitu-topic&…