Junit单元测试技术

合集下载

Junit4单元测试框架的常用方法介绍

Junit4单元测试框架的常用方法介绍

Junit4单元测试框架的常⽤⽅法介绍Junit 介绍:Junit是⼀套框架(⽤于JAVA语⾔),由 Erich Gamma 和 Kent Beck 编写的⼀个回归测试框架(regression testing framework),即⽤于⽩盒测试。

本⽂介绍的内容:1 Junit Myeclipse测试类的⽣成2 JUnit 4 常⽤的⼏个annotation 介绍与使⽤ (@Before @After @Test @Ignore @BeforeClass @AfterClass)3 常⽤的断⾔介绍4 特殊的处理(限时测试,异常测试)5 参数化配置(@Parameters)准备测试代码测试的⽅法(正确、错误⽅法、死循环、抛异常)LogicServicepackage com.logic;public class LogicService {public int add(int x ,int y){ //加法return x+y;}public int sub(int x ,int y){ //减法return x-y;}public int div(int x ,int y){ //除法return x/y;}public int div2(int x ,int y){ //除法做了异常判断try {int z = x/y;} catch (Exception e) {e.printStackTrace();}return x/y;}public void loop(int x ,int y){ //死循环for(;;)x=y;}public void unCompleted(int x ,int y){ //未完成的模块//还在开发中}}⼀ Myeclipse测试类的⽣成1 对需要测试的类点右键 NEW ⼀个Junit Test Case2 点击NEXT注意 1 选择NEW Junit 4 test2 source folder 是默认会填写上之前右键NEW的那个类,如果不是的话,请⾃⾏进⾏修改3 package 默认会填写当前的包名个⼈建议重新开个测试包-即在包后⾯加上.test 表⽰是单元测试⽤例专⽤包与源代码分离4 name 默认会在之前右键NEW的那个类的基础的后⾯加上Test 如果不是的话,建议⾃⾏进⾏修改,便于标⽰5 初始化的⽅法,我⼀般会勾上个setUp,这个请随意。

基于JUnit自动化单元测试的研究

基于JUnit自动化单元测试的研究
d fe e tTe t a e n o t e Te t u t ,wh c a k h e t g t s er n a t ma ial .Th sa tcea a y e h p l if r n sc s s it h s S ie ih c n ma e t e t s i a k b u u o t l n c y i r il n l s s t ea p i —
软件 测试在软件质量控制过程中起着非 常重要 的作用 , 单元 测试 尤为重要 。J i是非常强大 的单元 测试工 Unt
具, 主要用于测试基于 jv 语言编写的类 和方法 , aa 而且它还 能把不 同的测试用例组 织成测试用 例集来进行 测试 , 使测 试运
行 自动化 。文章分析 了应用 J k单元测试方法以及使用 J k结合 An 构建工具来实现单元 自动化测试及增量开发 。 Un Un t
总第 2 4 4 期 2 1 年第 2 00 期
计算机与数字工程
Co u e mp tr& Dii lE gn e ig gt n ie rn a
Vo . 8 No 2 13 .
52
基 于 J nt自动 化 单 元 测 试 的 研 究 U i
白 凯 崔冬华
太原 002) 3 0 4 ( 太原理工 大学计算机与软件学院 摘 要
K y W ors J i,tsS ie e d Un t e tut ,An t
CIs a s N帅 b r TP 】 e 3]
1 引 言
软 件测试 是保 障软 件质量 的重 要手 段 , 这一 点
的约定编写 测试代 码 , 就可 以对 自己要测 试 的代 码
进行测试 。J i是 由 E i a a和 K n ek编 Unt r hG mm c et c B

(2).mybatis单元测试(junit测试)

(2).mybatis单元测试(junit测试)

(2).mybatis单元测试(junit测试)⼀、Junit使⽤步骤:1、创建测试⽬录,(src、测试⽬录是test)2、在测试⽬录test中创建与src中相同的包名3、为需要测试的类创建测试类,例如:UsersMapper,测试类是UsersMapperTest4、为被测试类(UsersMapper)中的需要测试的⽅法在测试类型创建相应的⽅法。

⽐如,需要测试findById⽅法,那么则测试类中创建findById⽅法,测试⽅法的要求a、不能有返回值、不能有参数b、需要只⽤@Test注解对该⽅法进⾏注解。

5、在测试⽅法中,使⽤断⾔对结果进⾏判断,assert,判断⼀。

单元测试1. 在项⽬下创建⼀个⽬录test,之后将test右键Mark Directory as(标记⽬录为)->测试源根2. 在test下创建类,类的包名与被测试类的包名⼀致,在被测试类后⾯加上Test,例如:ersMapper与ersMapperTest。

在测试⽅法前@Test,导⼊junit测试路径,点击确定即可,之后maven后台下载。

3. Mybatis的核⼼对象:SqlSessionFactoryBuilder , SqlSessionFactory , SqlSession。

(SqlSessionFactoryBuilder创建⼯⼚,⼀般只⽤⼀次。

SqlSessionFactory是⼯⼚,⼯⼚长期存在。

SqlSession例如是⼯⼚造的汽车,有时间期限,即使⽤完⼯⼚依旧存在。

) SqlSeessionFactoryBuilder⽤过即丢,可⽤来创建多个SqlSessionFactory实例,并提供多个build⽅法的重载来构建SqlSessionFactory. SqlSession(⼀般瞬时、短链接,也可以长连接,⽤完关闭)build(InputStream inputStream,String environment,Properties properties)build(Reader reader,String environment,Properties properties)build(Configuration config)配置信息以三种形式提供给 SqlessionFactoryld 的build ⽅法:InputStream(字节流) Reader (字符流) Configuration (类)读取XML⽂件构造⽅式:String CONFIG_FILE = "mybatis-config.xml";InputStream resourceAsStream = Resources.getResourceAsStream(CONFIG_FILE);SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder().build(resourceAsStream);//⾮静态成员,实例成员,成员变量,通过构造⽅法初始化。

单元测试技术包括哪些

单元测试技术包括哪些

单元测试技术包括哪些在软件开发过程中,单元测试是一项非常重要的软件测试技术,它可以确保代码的质量和功能正常运行。

单元测试是针对程序中最小可测试单元进行测试,通常是函数、方法或类。

单元测试的目的是在代码级别验证程序的正确性,帮助开发人员及时发现和修复bug。

那么,单元测试技术包括哪些呢?以下是一些常见的单元测试技术:1. 测试框架测试框架是进行单元测试的基础设施,它提供了各种工具和功能来简化测试过程。

常见的测试框架包括JUnit、TestNG(Java)、PHPUnit(PHP)、pytest (Python)等。

测试框架能够帮助开发者编写测试用例、运行测试、生成测试报告等。

2. 断言断言是单元测试中的关键组成部分,用于检查代码的实际输出是否符合预期。

通过断言语句,开发人员可以判断测试结果是否符合预期,并根据结果来决定测试是否通过。

常见的断言方式包括assertEquals、assertTrue、assertNotNull等。

3. MockingMocking是指在单元测试中用虚拟对象替代真实对象的技术。

通过Mocking,开发人员可以隔离被测试代码与外部依赖的联系,避免外部依赖对测试结果产生影响。

常见的Mocking工具包括Mockito、EasyMock等。

4. 数据驱动测试数据驱动测试是一种测试技术,通过在多组输入数据上运行相同的测试用例来验证代码的正确性。

这种方式可以大大提高测试的覆盖范围,尤其适用于需要验证多组输入输出关系的情况。

5. 循环测试循环测试是一种通过多次执行相同的测试用例来验证代码的鲁棒性和稳定性的技术。

通过循环测试,开发人员可以模拟长时间运行的情况,发现潜在的内存泄漏、资源泄漏等问题。

6. 边界测试边界测试是一种重要的测试技术,通过在输入值的边界上进行测试来验证代码的正确性。

边界测试可以帮助开发人员发现代码在极端输入条件下的bug,提高代码的鲁棒性和稳定性。

综上所述,单元测试技术包括测试框架、断言、Mocking、数据驱动测试、循环测试和边界测试等多种技术。

Junit5-单元测试框架总结(基于IntelliJIDEA)

Junit5-单元测试框架总结(基于IntelliJIDEA)

Junit5-单元测试框架总结(基于IntelliJIDEA)⾸先Junit5我觉得它是⼀个测试框架,当你编写完⼀个类之后,需要测试⼀下你写的功能是否正常运⾏。

⼀种⽅法是创建⼀个Main函数来运⾏测试,这个⽅法简单易懂,不过有⼀些不合理的地⽅。

例如图书借阅系统,测试的时候,会有新增记录、查询记录、删除记录、修改记录等等,如果全部写在主函数测试,会使得主函数很乱,即可读性很低。

其⼆在Junit5中测试,每⼀块功能独⽴为⼀个函数,可读性提⾼,逼格也提⾼。

总之,Junit5既然存在,就必定有它"合理"的地⽅,有它的闪光点。

对于我们来说,技多不压⾝,多学⼀门技术总不会错。

扯了这么多,我们⾸先先来尝试⼀下helloworld的⽤法。

后续还会有⼀个Junit5综合项⽬,将在近期发布。

这个是我在2019年11⽉26⽇尝试,运⾏截图、编译环境也是这个时期的。

如果有某⼀步出现了错误,欢迎留⾔,我接受⼤家的Bug,希望本⽂能够帮助更多的童鞋学习了解Junit5,共同提⾼。

第⼀步:创建java解决⽅案,我命名为Junit_test:第⼀步很简单,就是跟普通java⼀样,创建⼀个解决⽅案。

第⼆步:创建⼀个⽂件夹,⽤来放jar⽂件。

我这⾥命名为lib第三步:将这三个jar包复制到lib⽂件夹,然后导⼊到项⽬上⽅为三个jar包的下载地址,全免费,如果⽆法下载请留下邮箱,我看到后会私发拷贝进去之后,如上图所⽰,接下来我们需要真正把它导⼊到项⽬中PS:这⾥要三个包全部选中,点击OKPS_again:这⾥三个勾全部选上,然后OK第四步:创建⼀个包,包下创建⼀个类。

我把包命名为cn.ypc,类名为helloworld package cn.ypc;public class helloworld {public void paint(String str){System.out.println("hello " + str + "!");}}这是⼀个很普通的java类,类内只有⼀个⽅法,即传⼊⼀个字符串,输出 hello 加这个字符串第五步:同第⼆步创建⼀个test的⽂件夹,⽤于存放测试函数,然后标记为测试类⽂件夹此时test⽂件夹会变成淡绿⾊,如下图所⽰打开helloworld.java⽂件,同时按下ctrl + shift + T要在类内部点哦,在外⾯点没⽤的勾选上这个paint需要测试的函数,点击OK然后对代码进⾏相应的修改package cn.ypc;import org.junit.*;public class helloworldTest {helloworld helloworld;@Testpublic void paint() throws Exception{helloworld = new helloworld();helloworld.paint("ypc");helloworld.paint("yuyao");helloworld.paint("zwz");}}@Test表明下⾯的函数是测试的函数,可以在⾥⾯测试helloworld类⾥⾯的paint函数。

junit测试实验报告

junit测试实验报告

junit测试实验报告
《Junit测试实验报告》
在软件开发过程中,测试是非常重要的一环。

而Junit作为一个广泛应用的Java 单元测试框架,可以帮助开发人员快速、方便地进行测试。

本文将通过一个实验报告,介绍Junit测试的基本原理和使用方法。

实验目的:
1. 了解Junit测试框架的基本原理和使用方法
2. 掌握Junit测试的常用注解和断言方法
3. 通过实际示例,展示Junit测试的实际应用
实验内容:
本次实验将以一个简单的Java类为例,演示如何使用Junit进行单元测试。

该Java类包含一个简单的方法,用于计算两个整数的和。

实验步骤:
1. 导入Junit测试框架
2. 创建一个测试类,并在该类中编写测试方法
3. 使用Junit的注解和断言方法,对目标方法进行测试
4. 运行测试,并查看测试结果
实验结果:
经过测试,目标方法运行正常,测试结果符合预期。

实验总结:
通过本次实验,我们了解了Junit测试框架的基本原理和使用方法。

Junit提供了丰富的注解和断言方法,可以帮助开发人员编写简洁、高效的测试代码。


过Junit测试,可以有效地提高软件质量,减少bug的产生。

在实际开发中,我们应该充分利用Junit测试框架,编写完善的测试用例,保证软件的稳定性和可靠性。

同时,我们也应该不断学习和探索,掌握更多的测试技巧和方法,为软件开发贡献自己的力量。

总之,Junit测试是软件开发过程中不可或缺的一部分,希望通过本次实验,能够对Junit测试有更深入的了解,为我们的软件开发工作带来更大的帮助。

Junit单元测试-实验报告

Junit单元测试-实验报告

软件工程与计算Ⅰ实验报告实验名称: Junit单元测试实验分组号:实验人:陈燕珠班级: H13软件工程学号: _实验指导教师:陈国明实验场地:花都校区实验楼709实验时间: 2015、6、9成绩:实验四 Junit单元测试一、实验目的1.掌握白盒测试方法,并按单元测试的要求设计测试用例。

2.能熟练应用junit测试工具进行单元测试。

3.进行代码覆盖检查。

二、实验要求掌握系统测试的基本原理,按实验内容及步骤完成操作,完成实验报告,所有实验环节均由每位学生独立完成,严禁抄袭他人实验结果。

根据白盒法设计测试用例,并撰写单元测试计划书。

根据每个测试用例,编写基本Junit的单元测试脚本。

生成html格式的代码覆盖测试报告。

三、实验环境主流PC机一套,windows操作系统eclipse开发平台。

四、原理知识1.测试基本方法黑盒测试和白盒测试(1)黑盒测试(Black_Box testing)黑盒测试把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下、注重于测试软件的功能性要求,测试者在程序接口处进行测试,只检查程序功能是否按照规格说明书的规定正常使用,程序是否能接收输入数据而产生正确的输出信息,并且保持数据库和文件的完整性黑盒测试通常能发现以下几类错误:1、功能不对或遗漏2、界面错误3、数据结构或外部数据库访问错误4、性能错误5、初始化和终止错误采用黑盒技术设计测试用例的方法1、等价类划分2、边值分析法3、因果图4、猜错5、随机测试图1:白盒测试(2)白盒测试(White_Box testing)盒测试主要用于检查程序的内部结构、逻辑、循环和路径。

常用的白盒测试用例设计方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、符号测试法等。

其中最主要的方法就是逻辑覆盖法。

1、语句覆盖2、判定覆盖3、条件覆盖4、条件判定覆盖5、多条件覆盖图2:黑盒测试手工测试和自动化测试(1)手工测试手工测试有其不可替代的地方,因为人具有很强的判断能力,而工具没有,所以手工测试的不可替代性体现在以下几个方面:①测试用例的设计:测试人员的经验和对错误的判断能力是工具不可替代的;②界面和用户体验测试:人类的审美观和心理体验是工具不可模拟的;③正确性的检查:人们对是非的判断、逻辑推理能力是工具不具备的。

Junit4.12+powermock+mock单元测试静态方法、普通方法、私有方法

Junit4.12+powermock+mock单元测试静态方法、普通方法、私有方法

Junit4.12+powermock+mock单元测试静态⽅法、普通⽅法、私有⽅法⾸先,我先引⽤⼤神的⼀些语⾔解释⼀下mock对单元测试的作⽤。

参考博客:1、为什么要⽤mock我的⼀本书的解释: (1)创建所需的DB数据可能需要很长时间,如:调⽤别的接⼝,模拟很多数据 (2)调⽤第三⽅API接⼝,测试很慢, (3)编写满⾜所有外部依赖的测试可能很复杂,复杂到不值得编写,Mock模拟内部或外部依赖可以帮助我们解决这些问题另⼀本TDD书的解释: (1)对象的结果不确定,如每获取当前时间,得到的结果都不⼀样,⽆法符合我们的预期; (2)实现这个接⼝的对象不存在; (3)对象速度缓慢 对于TDD还有⼀个更重要原因:通过模拟可以隔离当前⽅法使⽤的的所有依赖,让我们更加专注于单个单元,忽略其调⽤的代码的内部⼯作原理⼀本博客的⼲货: (1)Mock可以⽤来解除测试对象对外部服务的依赖(⽐如数据库,第三⽅接⼝等),使得测试⽤例可以独⽴运⾏。

不管是传统的单体应⽤,还是现在流⾏的微服务,这点都特别重要,因为任何外部依赖的存在都会极⼤的限制测试⽤例的可迁移性和稳定性。

(2)Mock的第⼆个好处是替换外部服务调⽤,提升测试⽤例的运⾏速度。

任何外部服务调⽤⾄少是跨进程级别的消耗,甚⾄是跨系统、跨⽹络的消耗,⽽Mock可以把消耗降低到进程内。

⽐如原来⼀次秒级的⽹络请求,通过Mock可以降⾄毫秒级,整整3个数量级的差别。

(3)Mock的第三个好处是提升测试效率。

这⾥说的测试效率有两层含义。

第⼀层含义是单位时间运⾏的测试⽤例数,这是运⾏速度提升带来的直接好处。

⽽第⼆层含义是⼀个测试⼈员单位时间创建的测试⽤例数。

以单体应⽤为例,随着业务复杂度的上升,为了运⾏⼀个测试⽤例可能需要准备很多测试数据,与此同时还要尽量保证多个测试⽤例之间的测试数据互不⼲扰。

为了做到这⼀点,测试⼈员往往需要花费⼤量的时间来维护⼀套可运⾏的测试数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JUnit单元测试
(一)、JUnit介绍:
测试对于保证软件开发质量有着非常重要的作用,单元测试更是必不可少,JUnit是一个非常强大的单元测试包,可以对一个/多个类的单个/多个方法测试,还可以将不同的TestCase组合成TestSuit,使测试任务自动化。

Eclipse同样集成了JUnit,可以非常方便地编写TestCase。

(二)、为什么使用JUnit?
不知道大家以前在对自己的项目是怎么进行测试的。

反正我的测试方法是在一个类中都写一个main函数,然后根据类中方法的参数传入相应的值。

这样做很麻烦,最大的缺点就是如果项目功能模块很多的话,那就完了。

:)
(三)、eclipse中建立一个完整的单元测试
Junit3
package cn.itcast.example;
public class Demo1 {
private int n;
public Demo1(int n) {
this.n = n;
}
// 返回绝对值:
public int foo() {
return n>0 ? n : (-n);
}
}
package cn.itcast.example;
public class Demo2 {
public int add(int x, int y) {
return x + y;
}
public static int divide(int x, int y) {
return x / y;
}
public static int multiple(int x, int y) {
return x * y;
}
}
测试用例
public class Demo1Test extends TestCase { private Demo1 s1, s2;
protected void setUp() throws Exception { s1 = new Demo1(10);
s2 = new Demo1(-7);
}
protected void tearDown() throws Exception { }
public void testFoo() {
assertTrue(s1.foo()==10);
assertTrue(s2.foo()==7);
}
}
public class Demo2Test extends TestCase {
Demo2 demo;
protected void setUp() throws Exception { super.setUp();
demo = new Demo2();
System.out.println("go.........");
}
protected void tearDown() throws Exception { super.tearDown();
}
public void testAdd() {
assertEquals(7, demo.add(3, 4));
}
public void testDivide() {
assertEquals(4, demo.divide(8, 2));
}
public void testMultiple() {
assertEquals(20, demo.multiple(4, 5));
}
}
public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite("Test for cn.itcast.junit3");
//$JUnit-BEGIN$
suite.addTestSuite(Demo1Test.class);
suite.addTestSuite(Demo2Test.class);
//$JUnit-END$
return suite;
}
}
Junit4
setUp()方法在测试方法前调用,一般用来做测试准备工作。

tearDown()方法在测试方法后调用,一般作测试的清理工作。

setUpBeforeClass()方法在整个类初始化之后调用,一般用来做测试准备工作。

tearDownAfterClass()方法在整个类结束之前调用,一般作测试的清理工作。

constructor()为是否包含构造方法。

@BeforeClass标签注释的方法用于在整个类测试过程的初始化后调用一次,@AfterClass标签注释的方法则是整个测试类结束之前调用一次。

这2个标签的搭配可以避免使用@Before、@After标签组合在每个测试方法前后都调用的弊端,减少系统开销,提高系统测试速度。

(不过对环境独立性要求较高的测试还是应当使用@Before、@After来完成)
@Test标签用来标注待测试的方法,按照类中声明的顺序执行。

Junit4为测试方法增加了判断异常的方式,避免了以前还要通过try/catch块捕捉异常再抛出的复杂方式,简单的这样声明“@Test(expected=ArithmeticException.class)”Junit4就会检查此方法是否抛出ArithmeticException异常,如果抛出则测试通过,没抛出则测试不通过(@Test标签还有一些其他参数,例如超时测试@Test(timeout=1)这样,但是由于并不能准确反应实际时间,所以应用较少,经过我测试误差太大绝对不适合拿来做超时测试的)
@Ignore标签会告诉Junit4忽略它所标注的方法,例如数据库不可用时可以用此标注标注一些测试数据库连接的方法来避免测试失败。

通过@RunWith和@SuiteClasses标签来注释一个空的包含无参数构造函数的类来作为套件类,将需要组成套件运行的类加到@SuiteClasses的属性中即可。

JUnit4不再受命名的限制
JUnit被用来测试代码,并且它是由能够测试不同条件的
断言方法组成:
assertEquals(a, b) 测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法)
assertFalse(a) 测试a是否为false(假),a是一个Boolean数值。

assertNotNull(a) 测试a是否非空,a是一个对象或者null。

assertNotSame(a, b) 测试a和b是否没有都引用同一个对象。

参数化测试
你可能遇到过这样的函数,它的参数有许多特殊值,或者说他的参数分为很多个区域。

比如,一个对考试分数进行评价的函数,返回值分别为“优秀,良好,一般,及格,不及格”,因此你在编写测试的时候,至少要写5个测试,把这5中情况都包含了,这确实是一件很麻烦的事情。

测试运行机
JUnit4中,广泛地使用测试运行机。

如果没有指定@RunWith,那么你的类仍然会使用一个默认运行机(org.junit.internal.runners.TestClassRunner)执行。

注意,最初的Calculator类中并没有显式地声明一个测试运行机;因此,它使用的是默认运行机。

一个包含一个带有@Test的方法的类都隐含地拥有一个@RunWith。

事实上,你可以把下列代码添加到Calculator类上,而且其输出结果会完全一样。

在@Parameterized和@Suite的情况下,我需要一个特定的运行机来执行我的测试用例。

这就是为什么我显式地注解了它们。

案例
参考源文件junittest。

相关文档
最新文档