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

第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**************************/
     @Test
     public void testSubFunction() {
          assertEquals(testSub, sub);
     }
     /************************End***************************/

}
相关推荐
A_cainiao_A17 小时前
【软考】【2025年系统分析师拿证之路】【啃书】第七章 软件工程(八)
软件工程
开开心心就好20 小时前
极速、免费、体积小,一款PDF转图片软件
人工智能·智能手机·eclipse·pdf·软件工程·软件需求
qw9492 天前
Spring 6 第6章——单元测试:Junit
spring·junit·单元测试
夏旭泽2 天前
软件工程的基本原理
软件工程
夏旭泽2 天前
软件工程的本质特征
软件工程
風落2 天前
《告别复杂PDF编辑,PDF Eraser开启便捷办公新体验》
pdf·软件工程·软件需求
计软考研大C哥2 天前
【25考研】考清华的软件工程专业的研究生需要准备什么?
经验分享·考研·软件工程
逆风局?3 天前
JUnit单元测试
junit·单元测试
诗和远方ya3 天前
visual studio连接sql server数据库
数据库·sqlserver·软件工程·visual studio
码明4 天前
SpringBoot整合junit
数据库·spring boot·junit