单元测试系列一:使用JUint进行单元测试文の博客

JUnit是一个Java语言的单元测试框架,由ErichGamma和KentBeck编写的一个回归测试的框架(regressiontestingframework)。多数Java开发工具都已经集成了JUnit作为单元测试的工具,它是xUnit的一个子集。

XUnit是一套基于测试驱动开发的测试框架,可以使我们快速的进行单元测试,家族成员有PythonUnit、CppUnit、JUnit。

JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试,包括以下特性:

1)用于测试期望结果的断言(Assertion);

2)用于共享共同测试数据的测试工具;

3)用于方便的组织和运行测试的测试套件;

4)图形和文本的测试运行器。

JUnit3需要在方法名前加test作为前缀。

JUnit3中所有的方法都必须使用@text注解。

JUnit3必须继承junit.framework.TestCase类。

jar包就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入到你的项目中,然后就可以直接使用这些jar包中的类和属性以及方法。

JUint包含:

junit.jar。

hamcrest-core.jar,设置匹配性规则的一个框架,可以有效增强JUnit测试的能力。

eclipse中包含JUnit的测试框架,所以不需要单独下载jar包,我们可以使用Eclipse进行单元测试。

1)首先,我们需要创建一个被测试类,打开选项eclipse,选择File>>New>>JavaProject,在ProjectName中输入项目名称,例:junit4Demo,点击“Finish”,如下图所示:

2)创建好的项目在ProjectExplorer中显示,如下图所示:

3)项目名称右键>>New>>Package,在Name中输入包名,例:com.util,点击“Finish”,如下图所示:

4)创建好的包显示在项目的src目录下,如下图所示:

5)包名右键>>New>>Class,在Name中输入类名,例:Calculate,点击“Finish”,如下图所示:

6)被测试类创建好后,如下图所示:

7)被测试类包含加减乘除的运算的四个方法,所以添加代码如下:

packagecom.util;

publicclassCalculate{

publicintadd(inta,intb){

returna+b;

}

publicintsubtract(inta,intb){

returna-b;

publicintmultiply(inta,intb){

returna*b;

publicintdivide(inta,intb){

returna/b;

8)接下来导入JUnit的jar包,项目右键>>BuildPath>>ConfigureBulidPath,如下图所示:

9)选择Libraries>>AddLibrary>>JUnit>>JUnit4,点击“Finish”,点击“OK”,JUnit的jar包被导入项目中,如下图所示:

10)为了保证源代码与测试代码的分离,查找起来方便,可以在src目录下创建test目录,src右键>>New>>SourceFolder,FolderName设置为“test”,点击“Finish”,如下图所示:

11)创建好的目录显示在src目录下,如下图所示:

12)包名右键>>New>>JUnitTestCas,Name输入“CalculateTest”,选择Sourcefolder为“test”点击“Finish”,如下图所示:

13)这个测试类会自动为我们生成一个测试方法的模板,如下图所示:

14)在测试类中添加加减乘除四个方法的被测试代码,在测试过程中我们经常用到的断言方法有:assertEquals方法,该方法可以判断actualValue(实际值)与expectedValue(期望值)是否一致,如果两者不一致,则会抛出java/lang.AssertionError错误,打印出message(如果参数中有message的话),并跳出这个测试方法,下面的测试方法就是用这个方法去判断预期值与实际值是否一致,如下图所示:

importstaticorg.junit.Assert.*;

importorg.junit.Test;

publicclassCalcuateTest{

@Test

publicvoidtestAdd(){

assertEquals(6,newCalculate().add(4,2));

publicvoidtestSubtract(){

assertEquals(2,newCalculate().subtract(4,2));

publicvoidtestMultipy(){

assertEquals(8,newCalculate().multiply(4,2));

publicvoidtestDivide(){

assertEquals(6,newCalculate().divide(2,4));

15)被测试类名右键>>RunAs>>JUnitTest,选择测试类,点击“OK”,打开JUnit视图,我们可以看到四个测试方法全部通过,如下图所示:

Runs:总共介个测试方法/运行方法的个数;

Errors:抛出异常方法的计数器,是由代码异常引起的,它可以产生于测试代码本身的错误,也可能是被测试代码中一个隐藏的bug;

Failures:失败方法的计数器,一般单元测试中使用断言方法判断失败所引起的,这表示测试点发现了问题,就是谁程序输出结果和我们预期的不一样;

状态条:绿色代表成功,红色代表失败;

空白区域:本次运行方法或类的个数;

总结:

1)测试方法前必须使用@Test进行修饰;

2)测试方法使用publicvoid进行修饰,不能带任何参数;

3)新建一个源代码目录来存在我们的测试代码;

4)测试类的包应该和被测试类保持一致;

5)测试单元中的每个方法可以独立测试,测试方法间不能有任务的依赖;

6)测试类使用Test作为类名的后缀(不是必须);

7)测试方法使用test作为方法名的前缀(不是必须)。

1)创建一个测试方法,在JUnitTestCase页面中输入Name为“JunitFlowTest”,并选中页面下方的四个方法,点击“Finish”,如下图所示:

2)新建的测试类中自动生成这个方法的模板,我们会发现这四个方法并没有使用@Test进行修饰,而是分别使用的@BeforeClass、@Before、@After、@AfterClass进行修饰,如下图所示:

3)我们在每个测试方法中打印一句话,在写两个使用@Test修饰的方法,代码如下:

importorg.junit.After;

importorg.junit.AfterClass;

importorg.junit.Before;

importorg.junit.BeforeClass;

publicclassJunitFlowTest{

@BeforeClass

publicstaticvoidsetUpBeforeClass()throwsException{

System.out.println("thisisbeforeClass...");

@AfterClass

publicstaticvoidtearDownAfterClass()throwsException{

System.out.println("thisisafterClass...");

@Before

publicvoidsetUp()throwsException{

System.out.println("thisisbefore...");

@After

publicvoidtearDown()throwsException{

System.out.println("thisisafter...");

publicvoidtest1(){

System.out.println("thisistest1...");

publicvoidtest2(){

System.out.println("thisistest2...");

4)运行测试类,查看运行结果:

1)@BeforeClass修饰的方法会在所有方法前被调用前执行,而且该方法是静态的,所以当测试类加载后接着就会运行它,而且在内存中它只会存在一份实例,它比较适合加载配置文件;

2)@AfterClass所修饰的方法通常用来对资源的清理,如关闭数据库链接;

3)@Before和@After会在每个测试方法前各执行一次,通过被称之为固定代码的意思,意思就是一定会执行的代码段。

@Test是将一个普通的方法修饰为测试方法,Test有两个属性:

1.@Test(expected=xx.class)

1)创建一个测试方法,在JUnitTestCase页面中输入Name为“AnotationTest”,,点击“Finish”,在类中添加如下代码:

importorg.junit.Ignore;

publicclassAnotationTest{

@Test(expected=ArithmeticException.class)

assertEquals(3,newCalculate().divide(6,0));

2)运行后查看JUnit视图,观察测试结果,我们可以发现测试结果通过,没有报错,如果处理异常的代码删除掉就会出错,因为添加这个属性后,预期会抛出一个算数异常,可以捕获这个异常,如下图所示:

2.@Test(timeout=毫秒)

1)在AnotationTest类中修改代码如下:

@Test(timeout=2000)

publicvoidtestWhile(){

while(true){

System.out.println("runforever");

@Ignore所修饰的方法会被测试运行器忽略

@Ignore

2)运行后查看运行结果,如下图所示,在JUnit视图中可以看到这个方法并没有被执行,该方法会被测试运行器所忽略。

在测试过程中,随着项目的深入,项目的规模会越来越大,相应的测试类也会越来越多,那么会如果100个测试类,是不是就要运行100次,JUnit为我们提供了一个批量运行的测试类的方法,叫做测试套件,使用测试套件我们可以将所有的测试类都集合在一个测试套件中,这样每次需要验证系统功能的时候,只需要执行一次我们的测试套件就可以了。

如何编写测试套件?

1)创建一个测试类,命名为SuiteTest,测试套件有一个特点,它是一个空类,所以我们将默认的test()方法删除掉,如下图所示:

2)我们在再新建两个测试类,分别为TaskTest1,TaskTest2,打印一句话,如下图所示:

3)需要使用@RunWith这个注解,修改测试运行器,将其修改为Suite.class,这样这个类就成为测试套件的入口类,然后使用Suite.SuiteClass(),需要放入测试套件的测试类(或测试套件),它是以数组的形式作为参数,编写的代码如下图所示:

importorg.junit.runner.RunWith;

importorg.junit.runners.Suite;

@RunWith(Suite.class)

@Suite.SuiteClasses({TaskTest1.class,TaskTest2.class})

publicclassSuiteTest{

4)运行结果如下,可以看到TaskTest1.class、TaskTest2.class都运行了。

1)@RunWith可以更改测试运行器,本次测试套件中更改测试运行为Suite.class;

2)测试套件就是组织测试类一起运行的;

3)写一个作为测试套件的入口类,这个类里不包含其他的方法;

4)将要测试的类作为数据传入Suite.SuiteClass({}).

为了提高测试代码的可重用度,在JUnit4中提供了参数化测试可以解决这个问题,下面看一下参数设置的步骤:

1)创建一个测试类,名称为ParameterTest,将自动生成的测试方法的代码删除,如下图所示:

2)更改测试运行器,更改为Parameterized;

5)需要一个数组类型来存放多组数据,添加@Paramters注解;

7)还有写一个对加法测试的方法,整体的测试代码如下:

8)结果如下图所示,可以看到对加法进行了两组数据测试,使用这种方法可以对多组数据同时进行测试。

1)更改默认的测试运行器为RunWith(Parameterized.class);

1.安装Eclipse之前,需要安装javasdk,并将java的路径配置到系统路径中。

1)首先下载如jak1.6的版本,然后进行解压,如图:

2)打开jdk-6u39-windows-i586-20151102\jdk-6u39-windows-i586目录,运行“jdk-6u39-windows-i586.exe”,如图:

3)点击“下一步”,进入自定义安装界面,如图:

4)点击“下一步”,进入安装目标文件夹,如图:

5)点击“下一步”,进入安装进度页面,如图:

6)安装完成后,点击“完成”,安装完成。

7)安装完成后需要设置环境变量后编译器才能正常使用,找到jdk安装路径C:\ProgramFiles\Java\jdk1.6.0_39,然后右键“我的电脑>>属性高级>>环境变量”,打开“环境变量”对话框,如图:

8)在系统变量里点击新建,变量名称写JAVA_HOME,变量值填写JDK的安装路径C:\ProgramFiles\Java\jdk1.6.0_39,如图:

9)在系统变量里点击新建,变量名称填写CLASSPATH,变量值填写“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar”,如图:

10)在系统变量里找打Path变量,这是系统自带的,不用新建。双击Path,由于原来的变量值已经存在,故应在已有的变量后加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”。如图:

11)环境变量配置完毕,验证的方法:在运行框中输入cmd命令,回车输入java,按回车出现以下画面,如图:

12)输入javac,安回车出现以下画面,则表示设置成功,如图:

2.下载Eclipse时注意系统的位数是32位还是64位的。

1)下载完成后进行解压,然后双击eclipse.exe进行安装,如下图所示:

2)安装过程完成后,直接打开Ide窗口,如下图所示:

1安装Eclipse之前,需要安装javasdk,并将java的路径配置到系统路径中。

1)将压缩包解压到指定的安装目录,比如/usr,如下图所示:

2)此时生成名为jdk1.8.0_20的目录,将其重命名为jdk,这一步是可选的,如下图所示:

3)修改/etc/profile文件,添加环境变量,如下图所示:

4)在文末添加下面的内容(需根据个人JDK实际安装位置进行配置),如下图所示:

5)让/etc/profile文件修改后立即生效,可以使用如下命令(注意"."和"/"之间的空格),如下图所示:

6)验证Jdk安装成功,查看一下Java版本,如下图所示:

2下载Eclipse时注意系统的位数是32位还是64位的。

1)进入到Eclipse存放路径,并进行解压,如下图所示:

2)切换到安装包的目录,进行安装,如下图所示:

3)选择“EclipsePlatform”,点击“Next”,如下图所示:

4)点击“Next”,如下图所示:

5)点击“Finish”,如下图所示:

6)等待安装,如下图所示:

7)点击“Finish”,完成安装,如下图所示:

8)在安装目录运行Eclipse,显示如下图,成功安装!如下图所示:

THE END
1.python基础——如何测试代码?代码测试可通过的测试 你需要一段时间才能习惯创建测试用例的语法,但创建测试用例之后,再添加针对函数的单元测试就很简单了。 要为函数编写测试用例,可先导入模块unittest和要测试的函数,再创建一个继承unittest.TestCase的类,并编写一系列方法对函数行为的不同方面进行测试。 https://blog.csdn.net/weixin_49895216/article/details/134278533
2.白盒测试方法wx634e5f8a4276e的技术博客白盒测试又称透明盒测试、逻辑驱动测试,是测试被测单元内部如何工作的一种测试方法,根据程序内部逻辑结构及有关信息来设计和选择测试用例,对程序的逻辑结构进行测试,可覆盖全部代码、分支、条件和路径等。保证程序中所有关键路径的测试,防止由于没有执行的路径在实际投入运行后执行到发生意外的情况,衡量测试完整性,程序https://blog.51cto.com/u_15834920/5767451
3.安全测试方法目前主要安全测试方法有: ①静态的代码安全测试:主要通过对源代码进行安全扫描,根据程序中数据流、控制流、语义等信息与其特有软件安全规则库进行匹对,从中找出代码中潜在的安全漏洞。静态的源代码安全测试是非常有用的方法,它可以在编码阶段找出所有可能存在安全风险的代码,这样开发人员可以在早期解决潜在的安全问题。而https://xue.baidu.com/okam/pages/strategy/index?strategyId=141649071995450&source=natural
4.『软件测试4』耗子尾汁!2021年了,你还不知道这4种白盒测试方法吗?2、白盒测试的测试对象 白盒测试的测试对象是基于被测试程序的源代码,而不是软件的需求规格说明书。 使用白盒测试方法时,测试人员必须全面了解程序内部逻辑结构,检查程序的内部结构,从检查程序的逻辑着手,对相关的逻辑路径进行测试,最后得出测试结果。 3、白盒测试的原则 https://www.imooc.com/article/319673
5.一种基于uppaal模型的汽车软件源代码仿真测试方法1.一种基于UPPAAL模型的汽车软件源代码仿真测试方法,其特征是,实现步骤如下 (O根据需求规格说明,构建UPPAAL模型,构建好的UPPAAL模型中的全局声明部分定义的数据变量和管道变量就是测试系统中的输入变量和输出变量,利用构建好的UPPAAL模型进行仿真和功能需求验证; (2)根据UPPAAL模型的定义或者通过UPPAAL仿真器,确定测试系统https://www.xjishu.com/zhuanli/55/201210382231.html
6.单元测试常见问题及测试方法单元测试常用方法.png 驱动代码(Driver)指调用被测函数的代码:单元测试中,驱动模块通常包括调用被测函数前的数据准备、调用被测函数及验证相关结果三个步骤。 桩代码(Stub)是用来代替真实代码的临时代码。比如,某个函数A的内部实现中 调用了一个尚未实现的函数B,为了对函数A的逻辑进行测试,那么就需要模拟一个函数Bhttps://www.jianshu.com/p/2ed4a7c203e3
7.在intellijidea中快速生成测试代码腾讯云开发者社区在intellij idea中快速生成测试代码 将鼠标放到类的任意位置,摁下Ctrl+Shift+T,然后Create a new Test即可。 JUnit4为了保证每个测试方法都是单元测试,是独立的互不影响。所以每个测试方法执行前都会重新实例化测试类。 为什么Junit没有main()方法就能运行 https://cloud.tencent.com/developer/article/1884994
8.静态代码检测工具:原理作用优点及选择指南为了确保代码的质量和安全性,在应用开发阶段使用静态代码检测工具进行代码检测越来越重要。 一、静态代码检测工具的原理 静态代码检测工具直接对源代码进行分析和检查,而不需要实际运行代码,从而发现潜在的问题和缺陷。其主要原理包括以下几个方面: 1. 语法分析:静态检测工具通过解析源代码,进行语法分析,以检查代码中的https://zhuanlan.zhihu.com/p/642168605
9.TestStars星云测试精准测试ThreadingTest穿线测试选用某平台工具(简称TT)对WIFI小车机器人的Android手机控制平台进行黑盒手工的测试,达到小车控制与代码逻辑分析。 三、静态测试与代码审查 静态测试内容里面要求采取多种的测试方法,例如‘低复杂度的强制要求’一般需要通过满足一定的度量指标来实现,度量指标包括圈复杂度、嵌套深度等等,除此之外 静态测试还要求一些其它的http://www.threadingtest.com/newstest/%E7%B2%BE%E5%87%86%E6%B5%8B%E8%AF%95%E5%9C%A8%E6%99%BA%E8%83%BD%E6%9C%BA%E5%99%A8%E4%BA%BA%E4%B8%8A%E7%9A%84%E5%BA%94%E7%94%A8.html
10.tiantian010日志测试生涯@flaky(max_runs=3, min_passes=2):第一次执行失败了,将会再次重复执行它3次,如果这3次中有2次成功了,则认为这个测试通过了。 查看(714)评论(0)收藏分享管理 Robot Framework类似功能 2019-09-10 18:02:34 查看(745)评论(0)收藏分享管理 不懂代码也能测试的接口自动化平台 http://www.51testing.com/index.php?uid-154419-action-spacelist-type-blog-itemtypeid-4546
11.面经2022年软件测试面试题大全(持续更新)附答案可测试性:每项需求都能够通过设计测试用例或其他的验证方法来进行测试; 可修改性:每项需求只应在SRS中出现一次,这样更改会容易保持一致性; 可跟踪性:在每项软件需求与它的根源与设计元素,源代码,测试用例之间建立起链接,而这种可跟踪性要求每项需求都必须以一种结构化的,粒度好的方式编写并单独标明,而不是大段https://maimai.cn/article/detail?fid=1730797197&efid=rTTgV-zsthsezl4x1LC2pw
12.《软件测验基本》期末考卷及参考谜底结构测试,静态测试,动态测试 10、软件是包括___﹑___﹑___的完整集合。 程序,数据,相关文档 11、边界值分析法属于___。 黑盒测试 12、单元测试是以___说明书为指导,测试源程序代码。 详细设计 13、集成测试以___说明书指导,测试软件结构。 概要设计 14、https://www.360docs.net/doc/ada5fd4e31687e21af45b307e87101f69e31fba2.html
13.使用测试资源管理器运行单元测试测试资源管理器还可以运行第三方和开放源代码单元测试框架,它们实现了测试资源管理器外接程序接口。 你可以通过 Visual Studio Extension Manager 和 Visual Studio 库添加其中许多框架。 有关详细信息,请参阅安装第三方单元测试框架。 你可以从代码快速生成测试项目和测试方法,或者根据你的需要手动创建测试。 当使用 Inthttps://docs.microsoft.com/zh-cn/visualstudio/test/unit-test-basics
14.医疗软件产品技术审评规范(2017版)确认是指通过提供客观证据认定软件满足用户需求和预期用途,通常是指在真实或模拟使用环境进行的用户测试。可追溯性分析是指追踪需求规范、设计规范、源代码、测试、风险管理之间的关系,分析已识别关系的正确性、一致性、完整性和准确性。 A级提供系统测试、用户测试的计划和报告摘要,描述测试的条件、工具、方法、通过准则https://yjj.beijing.gov.cn/yjj/ztzl48/ylqxjgfwzn/jsscgfzl64/yycp60/11001660/
15.科学网—欠小伙伴一个火山图,这次给你们补上扫描关注微信公众号,后台回复火山图,获取源代码和测试数据 # 读入数据 df = readFlie('./DEGs_result.txt',type = 'txt') # 绘图 fg=wn_volcano(Symbol = rownames(df),logFC=df$logFC,Pvalue=df$FDR) # 展示图片 fg # 保存图片 savePlots(path = './fg.pdf',plot = fg,type = 'pdf',widthhttps://wap.sciencenet.cn/home.php?mod=space&do=blog&id=1251072
16.代码测试工具SourceMonitorv3.5.8绿色版下载代码测试工具 SourceMonitor v3.5.8绿色版主要功能: 通过源文件快速收集,单次指标。 检测C++,C,C#,VB.NET,Java和Delphi源代码,Visual Basic(VB6)或HTML。 包括方法和功能水平指标C ++,C,C#,VB.NET,Java和Delphi的。 未经修改的复杂性度量的选择。 http://www.winwin7.com/soft/xtgj-2880.html