JUnit和单元测试入门简介
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 3 单元测试

Junit3单元测试笔记1.JUnit是每一个程序员必须掌握的技能之一。
2.使用JUnit的最佳实践:1)新建一个test的source folder,用于存放测试类源代码。
2)目标类与测试类应该处于同一个目录下,这样测试类中就不必导入源代码所在的包,因为他们处于同一目录下。
3)测试类命名规则:假如目标类是Calculator,那么测试类是CalculatorTest。
3.JUnit口号:keep the bar green to keep the code clean.保持横条是绿色的保持代码是整洁的4.我的名言:No reflection, No most frameworks.没有反射,没有太多的数据结构。
5.JUnit:单元测试不是为了证明您是对的,而是为了证明您的代码没有错误。
6.测试用例(Test Case)是单元测试的一个很重要的方面。
7.单元测试主要是用来判断程序运行的结果与自己期望的结果是否一致。
8.在JUnit3.8中,测试方法必须满足如下规则:1)方法必须是public。
2)方法必须是void。
没有返回值。
3)方法没有参数。
4)方法名必须是以Test开头。
9.测试用例之间要保持完全的独立性,不允许任何的依赖关系。
10.我们不能依赖与测试方法的执行顺序。
11.DRY(Don’t Repeat Yourself)。
不要重复你的代码。
在控制台中如下:每一个方法中都有:范例1:求int类型的数组中最大值。
除了使用JUnit方式进行测试之外,还可以在main方法中测试。
测试CalculatorTest,点击13.测试之前是什么状态,测试执行之后就应该是什么状态。
而不应该由于测试的原因导致状态发生了变化。
范例2:删除某一个目录的所有文件1)修改方法访问修饰符,将private修改为default或者是public。
(不推荐使用)。
2)使用反射在测试类中调用目标类的私有方法。
(推荐使用)。
(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);//⾮静态成员,实例成员,成员变量,通过构造⽅法初始化。
junit+maven单元测试

junit+maven单元测试⼀、概念junit是⼀个专门测试的框架集合maven进⾏单元测试,可批量测试类中的⼤量⽅法是否符合预期⼆、作⽤:单元测试:测试的内容是类中的⽅法,每⼀个⽅法都是独⽴测试的。
⽅法是测试的基本单位。
三、使⽤⽅法1、pom内加⼊依赖<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope></dependency>2、在maven中src/test/java⽬录下的,创建测试程序。
推荐的创建类和⽅法的提⽰:1、测试类的名称:Test+待测试类名2、测试⽅法的名称:Test+⽅法名称例如:你要测试HelloMaven创建测试类TestHelloMaven@Testpublic void testaDD(){测试HelloMaven的add⽅法是否正确}其中testAdd叫做测试⽅法,定义规则:1、⽅法必须是public的2、⽅法必须没有返回值3、⽅法名称⾃定义,推荐是Test+被测⽅法4、⽅法上⾯加上注解@Test四、举例,Hello项⽬1、新建java源程序,存放在Hello\src\main\java\com\testbk⽬录下,取名HelloMaven.java package com.testbk;import org.junit.Assert;import org.junit.Test;public class TestHelloMaven{@Testpublic void testAdd(){System.out.println("maven junit testAdd()===")HelloMaven hello = new HelloMaven();int res = hello.add(10,20);//验证10+20是不是30,juit提供的⽅法,对⽐结果的//assertEquals(期望值,实际值)Assert.assertEquals(30,res)}}2、新建maven测试类型,存放在Hello\src\main\java\com\testbk⽬录下,取名TestHelloMaven.java package com.testbk;import org.junit.Assert;import org.junit.Test;public class TestHelloMaven{@Testpublic void testAdd(){System.out.println("maven junit testAdd()===")HelloMaven hello = new HelloMaven();int res = hello.add(10,20);//验证10+20是不是30,juit提供的⽅法,对⽐结果的//assertEquals(期望值,实际值)Assert.assertEquals(30,res)}@Testpublic void testAdd2(){System.out.println("#####maven junit testAdd()2###");HelloMaven hello = new HelloMaven();int res = hello.add(10,20);//验证10+20是不是30,juit提供的⽅法,对⽐结果的//assertEquals(期望值,实际值)Assert.assertEquals(50,res);}}3、执⾏mvn clean:清理target⽬录[INFO] Scanning for projects...[INFO][INFO] ------------------------< com.testbk:testjava >-------------------------[INFO] Building maven 0.0.1-SNAPSHOT[INFO] --------------------------------[ jar ]---------------------------------[INFO][INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ testjava ---[INFO] Deleting D:\javaProjects\Hello\target[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 0.196 s[INFO] Finished at: 2021-04-25T22:50:10+08:00[INFO] ------------------------------------------------------------------------4、执⾏mvn compile:编译main/java⽬录下的java为class⽂件,同时把class拷贝到target/classes⽬录下⾯[INFO] Scanning for projects...[INFO][INFO] ------------------------< com.testbk:testjava >-------------------------[INFO] Building maven 0.0.1-SNAPSHOT[INFO] --------------------------------[ jar ]---------------------------------[INFO][INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ testjava ---[INFO] Using 'UTF-8' encoding to copy filtered resources.[INFO] Copying 0 resource[INFO][INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ testjava ---[INFO] Changes detected - recompiling the module![INFO] Compiling 1 source file to D:\javaProjects\Hello\target\classes[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 0.724 s[INFO] Finished at: 2021-04-25T22:54:23+08:00[INFO] ------------------------------------------------------------------------5、执⾏mvn test-compile:编译test/java⽬录下的java为class⽂件,同时class拷贝到target/test-classes⽬录下⾯[INFO] Scanning for projects...[INFO][INFO] ------------------------< com.testbk:testjava >-------------------------[INFO] Building maven 0.0.1-SNAPSHOT[INFO] --------------------------------[ jar ]---------------------------------[INFO][INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ testjava ---[INFO] Using 'UTF-8' encoding to copy filtered resources.[INFO] Copying 0 resource[INFO][INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ testjava ---[INFO] Nothing to compile - all classes are up to date[INFO][INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ testjava ---[INFO] Using 'UTF-8' encoding to copy filtered resources.[INFO] Copying 0 resource[INFO][INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ testjava ---[INFO] Changes detected - recompiling the module![INFO] Compiling 1 source file to D:\javaProjects\Hello\target\test-classes[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 0.764 s[INFO] Finished at: 2021-04-25T22:55:43+08:00[INFO] ------------------------------------------------------------------------6、执⾏mvn test:查看测试结果,通过1,失败1,并在指定⽬录⽣成测试报告Results :Failed tests: testAdd2(com.testbk.TestHelloMaven): expected:<50> but was:<30>Tests run: 2, Failures: 1, Errors: 0, Skipped: 0[INFO] ------------------------------------------------------------------------[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Total time: 1.050 s[INFO] Finished at: 2021-04-25T22:57:16+08:00[INFO] ------------------------------------------------------------------------[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project testjava: There are test failures. [ERROR][ERROR] Please refer to D:\javaProjects\Hello\target\surefire-reports for the individual test results.[ERROR] -> [Help 1][ERROR][ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.[ERROR] Re-run Maven using the -X switch to enable full debug logging.[ERROR][ERROR] For more information about the errors and possible solutions, please read the following articles:[ERROR] [Help 1] /confluence/display/MAVEN/MojoFailureException7、修改测试代码,并再次执⾏mvn testpackage com.testbk;import org.junit.Assert;import org.junit.Test;public class TestHelloMaven{@Testpublic void testAdd(){System.out.println("=====maven junit testAdd()===");HelloMaven hello = new HelloMaven();int res = hello.add(10,20);//验证10+20是不是30,juit提供的⽅法,对⽐结果的//assertEquals(期望值,实际值)Assert.assertEquals(30,res);}@Testpublic void testAdd2(){System.out.println("#####maven junit testAdd()2###");HelloMaven hello = new HelloMaven();int res = hello.add(30,20);//验证10+20是不是30,juit提供的⽅法,对⽐结果的//assertEquals(期望值,实际值)Assert.assertEquals(50,res);}}查看运⾏结果,测试通过T E S T S-------------------------------------------------------Running com.testbk.TestHelloMaven=====maven junit testAdd()===#####maven junit testAdd()2###Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.034 secResults :Tests run: 2, Failures: 0, Errors: 0, Skipped: 0[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 1.282 s[INFO] Finished at: 2021-04-25T22:58:41+08:00 [INFO] ------------------------------------------------------------------------。
junit5单元测试语法

junit5单元测试语法JUnit 5 是Java 编程语言中最新的单元测试框架,用于编写和运行单元测试。
JUnit 5 提供了许多新特性和改进,使得单元测试更加灵活、强大和易于扩展。
以下是关于JUnit 5 单元测试语法的基本介绍:1. 注解(Annotations)JUnit 5 中使用注解来标识测试方法、测试类和执行顺序等信息。
以下是一些常用的注解:•@Test: 标识一个测试方法。
•@BeforeEach: 标识在每个测试方法之前执行的方法。
•@AfterEach: 标识在每个测试方法之后执行的方法。
•@BeforeAll: 标识在所有测试方法之前执行的方法。
•@AfterAll: 标识在所有测试方法之后执行的方法。
•@DisplayName: 设置测试方法的显示名称。
import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.*;public class MyTests {@Test@DisplayName("My Test")void myTest(){// 测试代码assertEquals(2,1+1);}}2. 断言(Assertions)JUnit 5 提供了一系列的断言方法来验证测试的预期结果。
以下是一些常用的断言:•assertEquals(expected, actual): 验证两个值是否相等。
•assertTrue(condition): 验证条件是否为true。
•assertFalse(condition): 验证条件是否为false。
•assertNull(actual): 验证值是否为null。
•assertNotNull(actual): 验证值是否不为null。
•assertThrows(exceptionType, executable): 验证是否抛出指定类型的异常。
学习使用AndroidStudio进行应用测试

学习使用AndroidStudio进行应用测试一、AndroidStudio应用测试简介在移动应用开发过程中,测试是至关重要的一环。
AndroidStudio是Android开发者常用的集成开发环境(IDE),提供了丰富的测试工具和功能,帮助开发者快速、高效地进行应用测试。
本文将介绍学习使用AndroidStudio进行应用测试的基本知识和技巧。
二、AndroidStudio的测试工具AndroidStudio提供了多种测试工具,主要包括以下几种:1. JUnit测试:AndroidStudio集成了JUnit测试框架,开发者可以使用JUnit进行单元测试,验证代码的正确性。
通过创建测试类和编写测试方法,可以针对应用中的各个模块进行测试。
2. AndroidJUnit测试:AndroidJUnit是Android开发中专门用于测试UI的框架。
它基于JUnit框架扩展了一些针对Android应用的功能,如模拟用户交互、访问UI元素等。
通过使用AndroidJUnit,可以对应用的界面布局、用户交互以及各个UI组件的功能进行测试。
3. Espresso测试:Espresso是一种用于UI自动化测试的框架,可以模拟用户与应用的交互行为,例如点击按钮、输入文本等。
通过编写Espresso测试用例,可以自动化测试应用的各个界面和功能,提高测试效率。
4. UI Automator测试:UI Automator是Android官方提供的一个用于系统级UI自动化测试的工具。
它可以访问应用和设备的底层API,并模拟用户的各种操作,如点击、滑动、截图等。
通过使用UI Automator,可以进行跨应用测试、多个应用交互测试等。
三、使用JUnit进行单元测试JUnit是Java中常用的单元测试框架,也适用于Android应用的单元测试。
下面介绍使用JUnit进行单元测试的基本步骤:1. 在项目的test目录下创建一个新的Java类,命名为XXXTest (XXX为待测试的类名)。
软件测试实验-JUnit单元测试
第三章 JUnit单元测试实验1 开始使用JUnit【实验目的】1、学习使用JUnit4.X进行单元测试;2、掌握JUnit4.X编写测试代码的方法;3、应用JUnit进行单元测试,掌握最佳实践编写测试代码。
【实验环境】1、Windows环境,MyEclipse或Eclipse,JUnit4.x。
2、每个学生操作1台电脑。
【实验原理】JUnit是一个开源的Java编程语言的单元测试框架,最初由 Erich Gamma 和 Kent Beck 编写。
Junit测试是一种白盒测试工具。
JUnit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
具有JUnit经验对于应用“测试驱动开发(TDD)”的程序开发模型是非常重要的。
JUnit本质上是一套框架,即开发者制定了一套条条框框,遵循这此条条框框要求编写测试代码,如继承某个类,实现某个接口,就可以用JUnit进行自动测试了。
由于JUnit相对独立于所编写的代码,可以测试代码的编写可以先于实现代码的编写,XP 中推崇的 test first design的实现有了现成的手段:用JUnit写测试代码,写实现代码,运行测试,测试失败,修改实现代码,再运行测试,直到测试成功。
以后对代码的修改和优化,运行测试成功,则修改成功。
Java 下的 team 开发,采用 cvs(版本控制) + ant(项目管理) + JUnit (集成测试) 的模式时,通过对ant的配置,可以很简单地实现测试自动化。
【实验内容】根据下面的实验步骤完成实验。
1、JUnit包下载。
(1) 从下载Junit,打开该链接,会有一个下载链接,下载Junit4.X.zip,保存在用户机的文件系统中。
(2) 解包Junit-4.X,得到如图3-1的解包文件。
图1 Junit解包文件文件/目录描述junit.jar JUnit框架结构、扩展和测试运行器的二进制发布src.jar JUnit的源代码,包括一个 Ant 的buildfile文件junit 是个目录,内有JUnit自带的用JUnit编写的测试示例程序javadoc JUnit完整的API文档doc 一些文档和文章,包括“Test Infected: Programmers Love Writing Tests”和其它一些资料,可以帮助我们入门。
junit单元测试步骤
junit单元测试步骤:1、导入包junit测试包:JUnit测试版本,3.81版,4.0版,导入对应的jar包; 2、写一个类扩展(继承) TestCase; 3、在需要测试的方法名前加test生成新的测试方法;4、运行测试,用断言(assert***)的方法测试成功(显示绿色)或失败(显示红色),或者自己判断结果正确与否。
junit单元测试:
1、单元测试(unittesting),是在计算机编程中,针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。
2、单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。
3、单元测试会为我们的承诺做保证。
编写单元测试就是用来验证这段代码的行为是否与我们期望的一致。
在实践工作中,进行了完整计划的单元测试和编写实际的代码所花费的精力大致上是相同的。
一旦完成了这些单元测试工作,很多Bug将被纠正,在确信他们手头拥有稳定可靠的部件的情况下,开发人员能够进行更高效的系统集成工作。
使用JUnit实现自动化测试报告分析
使用JUnit实现自动化测试报告分析自动化测试是软件开发中必不可少的一环。
在这个过程中,测试报告是一个非常重要的组成部分。
通过测试报告,开发人员可以了解软件在不同情况下的表现,能够及时发现和解决问题,提高软件的质量。
然而,测试报告大多数情况下是由测试工程师手动处理的,不仅费时费力,而且容易出错。
因此,本文将介绍如何使用JUnit实现自动化测试报告分析,提高测试效率和减少错误率。
一、JUnit简介JUnit是一个轻量级的测试框架,可以在Java环境下进行单元测试。
它是TDD(测试驱动开发)的重要工具之一,可以帮助开发人员更加方便地进行单元测试,减少代码出错的可能性。
JUnit可以在Eclipse和IntelliJ IDEA等开发工具中直接进行安装和使用。
下面是JUnit测试用例的经典示例:```javaimport org.junit.Test;import static org.junit.Assert.*;public class CalculatorTest {@Testpublic void testAdd() {Calculator calculator = new Calculator();int result = calculator.add(2, 3);assertEquals(5, result);}}```上面这段代码使用了JUnit提供的@Test注解,标识这是一个测试用例。
在测试用例中,我们可以通过断言语句来判断实际结果是否与预期结果相同。
JUnit提供了多种断言方法,常用的有assertEquals()、assertTrue()和assertFalse()等。
二、自动化测试报告JUnit测试报告是测试的结果和统计信息的汇总。
测试报告提供有关测试通过率、执行时间和错误信息等方面的信息,可以帮助开发人员更好地了解系统的健康状况。
测试报告通常包括以下内容:1.测试执行的日期和时间2.测试用例的总数和执行的总时间3.测试通过的用例数和失败的用例数4.失败用例的详细错误信息5.执行过程中的警告信息JUnit可以很方便地生成测试报告。
Java单元测试:JUnit和Mockito的使用指南
Java单元测试:JUnit和Mockito的使用指南引言:在软件开发过程中,单元测试是一个至关重要的环节。
通过对代码的逐个单元进行测试,可以确保代码的质量和稳定性。
在Java开发中,JUnit和Mockito是两个常用的工具,它们可以帮助开发者更轻松地进行单元测试。
本文将为您介绍JUnit和Mockito的使用指南,帮助您更好地掌握这两个工具的功能和用法。
一、JUnit简介JUnit是一个Java语言的单元测试框架,它提供了一系列的注解和断言方法,方便开发者编写和执行单元测试。
JUnit的核心思想是“测试驱动开发”(Test-Driven Development,TDD),即在编写代码之前先编写测试用例,通过不断迭代的方式来开发和完善代码。
1.1 JUnit的安装和配置要使用JUnit,首先需要将JUnit的相关库文件导入到项目中。
可以通过Maven或Gradle等构建工具来管理依赖,也可以手动下载并导入JUnit的jar包。
导入完成后,就可以在代码中使用JUnit的注解和断言方法。
1.2 编写测试用例在JUnit中,每个测试用例都是一个独立的方法。
可以使用@Test注解来标记测试方法,JUnit会自动执行被标记的方法,并判断测试结果是否符合预期。
例如:```@Testpublic void testAddition() {int result = Calculator.add(2, 3);assertEquals(5, result);}```上述代码中,我们使用@Test注解标记了一个测试方法,该方法调用了被测试的Calculator类的add方法,并使用断言方法assertEquals来判断结果是否等于预期值。
如果测试通过,JUnit会输出“OK”;如果测试失败,JUnit会输出错误信息。
1.3 JUnit的高级特性除了基本的注解和断言方法外,JUnit还提供了一些高级特性,如参数化测试、测试套件和测试运行器等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JUnit和单元测试入门简介来源:第一万维网更新时间:2009-4-19 17:46:27内容简介:JUnit和单元测试入门简介1、几个相关的概念白盒测试——把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员是公开的。
回归测试——软件或环境的JUnit和单元测试入门简介1、几个相关的概念白盒测试——把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员是公开的。
回归测试——软件或环境的修复或更正后的“再测试”,自动测试工具对这类测试尤其有用。
单元测试——是最小粒度的测试,以测试某个功能或代码块。
一般由程序员来做,因为它需要知道内部程序设计和编码的细节。
JUnit ——是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。
他是用于单元测试框架体系xUnit的一个实例(用于java语言)。
主要用于白盒测试,回归测试。
2、单元测试概述2.1、单元测试的好处A、提高开发速度——测试是以自动化方式执行的,提升了测试代码的执行效率。
B、提高软件代码质量——它使用小版本发布至集成,便于实现人员除错。
同时引入重构概念,让代码更干净和富有弹性。
C、提升系统的可信赖度——它是回归测试的一种。
支持修复或更正后的“再测试”,可确保代码的正确性。
2.2、单元测试的针对对象A、面向过程的软件开发针对过程。
B、面向对象的软件开发针对对象。
C、可以做类测试,功能测试,接口测试(最常用于测试类中的方法)。
2.3、单元测试工具和框架目前的最流行的单元测试工具是xUnit系列框架,常用的根据语言不同分为JUnit(java),CppUnit(C++),DUnit (Delphi ),NUnit(.net),PhpUnit(Php )等等。
该测试框架的第一个和最杰出的应用就是由Erich Gamma (《设计模式》的作者)和Kent Beck(XP (Extreme Programming)的创始人)提供的开放源代码的JUnit。
3.Junit入门简介3.1、JUnit的好处和JUnit单元测试编写原则好处:A、可以使测试代码与产品代码分开。
B、针对某一个类的测试代码通过较少的改动便可以应用于另一个类的测试。
C、易于集成到测试人员的构建过程中,JUnit和Ant的结合可以实施增量开发。
D、JUnit是公开源代码的,可以进行二次开发。
C、可以方便地对JUnit进行扩展。
编写原则:A、是简化测试的编写,这种简化包括测试框架的学习和实际测试单元的编写。
B、是使测试单元保持持久性。
C、是可以利用既有的测试来编写相关的测试。
3.2、JUnit的特征A、使用断言方法判断期望值和实际值差异,返回Boolean值。
B、测试驱动设备使用共同的初始化变量或者实例。
C、测试包结构便于组织和集成运行。
D、支持图型交互模式和文本交互模式。
3.3、JUnit框架组成A、对测试目标进行测试的方法与过程集合,可称为测试用例(TestCase)。
B、测试用例的集合,可容纳多个测试用例(TestCase),将其称作测试包(TestSuite)。
C、测试结果的描述与记录。
(TestResult) 。
D、测试过程中的事件监听者(TestListener)。
E、每一个测试方法所发生的与预期不一致状况的描述,称其测试失败元素(TestFailure)F、JUnit Framework中的出错异常(AssertionFailedError)。
JUnit框架是一个典型的Composite模式:TestSuite可以容纳任何派生自Test的对象;当调用TestSuite对象的run()方法是,会遍历自己容纳的对象,逐个调用它们的run()方法。
(可参考《程序员》2003-6期)。
3.4、JUnit的安装和配置JUnit安装步骤分解:在/junit/中下载JUnit包并将Junit压缩包解压到一个物理目录中(例如C:\Junit3.8.1)。
记录Junit.jar文件所在目录名(例如C:\Junit3.8.1\Junit.jar)。
进入操作系统(以Windows2000操作系统为准),按照次序点击“开始设置控制面板”。
在控制面板选项中选择“系统”,点击“环境变量”,在“系统变量”的“变量”列表框中选择“CLASS-PATH”关键字(不区分大小写),如果该关键字不存在则添加。
双击“CLASS-PATH”关键字添加字符串“C:\Junit3.8.1\Junti.jar”(注意,如果已有别的字符串请在该字符串的字符结尾加上分号“;”),这样确定修改后Junit就可以在集成环境中应用了。
对于IDE环境,对于需要用到的JUnit的项目增加到lib中,其设置不同的IDE有不同的设置。
3.5、JUnit中常用的接口和类Test接口——运行测试和收集测试结果Test接口使用了Composite设计模式,是单独测试用例(TestCase),聚合测试模式(TestSuite)及测试扩展(TestDecorator)的共同接口。
它的public int countTestCases()方法,它来统计这次测试有多少个TestCase,另外一个方法就是public void run(TestResult ),TestResult是实例接受测试结果,run方法执行本次测试。
TestCase抽象类——定义测试中固定方法TestCase是Test接口的抽象实现,(不能被实例化,只能被继承)其构造函数TestCase(string name)根据输入的测试名称name创建一个测试实例。
由于每一个TestCase在创建时都要有一个名称,若某测试失败了,便可识别出是哪个测试失败。
TestCase类中包含的setUp()、tearDown()方法。
setUp()方法集中初始化测试所需的所有变量和实例,并且在依次调用测试类中的每个测试方法之前再次执行setUp()方法。
tearDown()方法则是在每个测试方法之后,释放测试程序方法中引用的变量和实例。
开发人员编写测试用例时,只需继承TestCase,来完成run方法即可,然后JUnit获得测试用例,执行它的run方法,把测试结果记录在TestResult之中。
Assert静态类——一系列断言方法的集合Assert包含了一组静态的测试方法,用于期望值和实际值比对是否正确,即测试失败,Assert 类就会抛出一个AssertionFailedError异常,JUnit测试框架将这种错误归入Failes并加以记录,同时标志为未通过测试。
如果该类方法中指定一个String类型的传参则该参数将被做为AssertionFailedError异常的标识信息,告诉测试人员改异常的详细信息。
JUnit 提供了6大类31组断言方法,包括基础断言、数字断言、字符断言、布尔断言、对象断言。
其中assertEquals(Object expcted,Object actual)内部逻辑判断使用equals()方法,这表明断言两个实例的内部哈希值是否相等时,最好使用该方法对相应类实例的值进行比较。
而assertSame(Object expected,Object actual)内部逻辑判断使用了Java运算符“==”,这表明该断言判断两个实例是否来自于同一个引用(Reference),最好使用该方法对不同类的实例的值进行比对。
asserEquals(String message,String expected,String actual)该方法对两个字符串进行逻辑比对,如果不匹配则显示着两个字符串有差异的地方。
ComparisonFailure类提供两个字符串的比对,不匹配则给出详细的差异字符。
TestSuite测试包类——多个测试的组合TestSuite类负责组装多个Test Cases。
待测得类中可能包括了对被测类的多个测试,而TestSuit负责收集这些测试,使我们可以在一个测试中,完成全部的对被测类的多个测试。
TestSuite类实现了Test接口,且可以包含其它的TestSuites。
它可以处理加入Test时的所有抛出的异常。
TestSuite处理测试用例有6个规约(否则会被拒绝执行测试)A 测试用例必须是公有类(Public)B 测试用例必须继承与TestCase类C 测试用例的测试方法必须是公有的(Public )D 测试用例的测试方法必须被声明为VoidE 测试用例中测试方法的前置名词必须是testF 测试用例中测试方法误任何传递参数n TestResult结果类和其它类与接口TestResult结果类集合了任意测试累加结果,通过TestResult实例传递个每个测试的Run()方法。
TestResult在执行TestCase是如果失败会异常抛出TestListener接口是个事件监听规约,可供TestRunner类使用。
它通知listener的对象相关事件,方法包括测试开始startTest(Test test),测试结束endTest(Test test),错误,增加异常addError(Test test,Throwable t)和增加失败addFailure(Test test,AssertionFailedError t) TestFailure失败类是个“失败”状况的收集类,解释每次测试执行过程中出现的异常情况。
其toString()方法返回“失败”状况的简要描述3.6、JUnit一个实例在控制台中简单的范例如下:1、写个待测试的Triangle类,创建一个TestCase的子类ExampleTest:2、ExampleTest中写一个或多个测试方法,断言期望的结果(注意:以test作为待测试的方法的开头,这样这些方法可以被自动找到并被测试)3、ExampleTest中写一个suite()方法,它会使用反射动态的创建一个包含所有的testXxxx 方法的测试套件:4、ExampleTest可以写setUp()、tearDown()方法,以便于在测试时初始化或销毁测试所需的所有变量和实例。
(不是必须的)5、写一个main()方法以文本运行器或其它GUI的方式方便的运行测试6、编译ExampleTest,执行测试。
3.7、Eclipse中JUnit的使用Eclipse自带了一个JUnit的插件,不用安装就可以在你的项目中开始测试相关的类,并且可以调试你的测试用例和被测试类。
使用步骤如下:1、新建一个测试用例,点击“File->New->Other…菜单项,在弹出的“New”对话框中选择”Java->JUnit”,下的TestCase 或TestSuite,就进入“New JUnit TestCase”对话框2、在“New JUnit TestCase”对话框填写相应的栏目,主要有Name(测试用例名),SuperClass (测试的超类一般是默认的junit.framework.TestCase),Class Under Test(被测试的类),Source Folder(测试用例保存的目录),Package(测试用例包名),及是否自动生成main,setUp,tearDown方法。