28.使用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,这个请随意。
java的单元测试JUnit4
java的单元测试JUnit4 java的单元测试1. 概念java单元测试是最⼩的功能单元测试代码, 单元测试就是针对单个java⽅法的测试java程序的最⼩功能单元是⽅法2. 单元测试的优点main⽅法进⾏测试的缺点:只能有⼀个main()⽅法, 不能把测试代码分离出来⽆法打印出测试结果和期望结果.例如: expected: 3628800, but actual: 123456单元测试的优点:确保单个⽅法正常运⾏如果修改了⽅法代码, 只需要保其对应的单元测试通过就可以了测试代码本省就可以作为⽰例代码可以⾃动化运⾏所有测试并获得报告3. Junit单元测试JUnit是⼀个开源的java语⾔的单元测试框架专门针对java语⾔设计, 使⽤最⼴泛, JUnit是标准的单元测试架构3.1 JUnit特点使⽤断⾔(Assertion)测试期望结果可以⽅便的组织和运⾏测试可以⽅便的查看测试结果常⽤的开发⼯具IDEA, Eclipse都集成了JUnit可以⽅便的继承到maven中3.2 maven依赖<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!-- junit的版本有3.x, 4.x, 5.x 5.x还没有发布, 现在都⽤是4.x --></dependency>3.3 在IDE中使⽤快捷键进⾏单元测试测试类的使⽤⽬录必须是如下, 测试类规定标准是在test⽬录中进⾏测试localhost:javatest lingjing$ tree -d -L 3.├── src│├── main││└── java│└── test│└── javaIDE的快捷键是:ctrl+shift+t --> create new test然后选择对应的⽅法进⾏测试就好了3.4 断⾔3.4.1 断⾔的例⼦断⾔的使⽤, 必须先引⼊必须的包: IDE⾃动创建的会⾃动引⼊import static org.junit.Assert.*;例⼦: 在main包中的编写的⼀个正则表达式的类import java.util.Arrays;/*** @ClassName Calculator* @Description 在main中的主要类* @Author lingxiangxiang* @Date 10:07 AM* @Version 1.0**/public class Calculator {public int calculate(String expression) {String[] ss = expression.split("\\+");System.out.println(expression + " => " + Arrays.toString(ss));int sum = 0;for (String s: ss) {sum += Integer.parseInt(s.trim());}return sum;}}测试类:import org.junit.Test;import static org.junit.Assert.*;public class CalculatorTest {@Testpublic void calculate() {assertEquals(3, new Calculator().calculate("1 + 2"));assertEquals(3, new Calculator().calculate("1 + 2 + 3"));}}测试类执⾏结果如下:1 +2 => [1 , 2]1 +2 +3 => [1 , 2 , 3]ng.AssertionError:Expected :3Actual :6<Click to see difference>at javatest.CalculatorTest.calculate(CalculatorTest.java:12)第⼀个⽅法: 1 + 2 => [1 , 2], 最终的结果3是正确的, 所有没有任何报错, 正常显⽰第⼆个⽅法: 1 + 2 + 3 => [1 , 2 , 3], 最终报错, 并提⽰在代码的位置: CalculatorTest.java:12, 并且罗列出Expected和Actual的值, 清楚的显⽰了结果的对⽐情况, 和代码出现的位置3.4.2 断⾔的常⽤⽅法assertEquals(100, x): 断⾔相等assertArrayEquals({1, 2, 3}, x): 断⾔数组相等assertEquals(3.1416, x, 0.0001): 浮点数组断⾔相等assertNull(x): 断⾔为nullassertTrue(x > 0): 断⾔为trueassertFalse(x < 0): 断⾔为false;assertNotEquals: 断⾔不相等assertNotNull: 断⾔不为null3.5 使⽤@Before和@After在@Before⽅法中初始化测试资源在@After⽅法中释放测试资源@BeforeClass: 初始化⾮常耗时的资源, 例如创建数据库@AfterClass: 清理@BeforeClass创建的资源, 例如创建数据库3.5.1 对于每⼀个@Test⽅法的执⾏顺序注意:** 单个@Test⽅法执⾏前会创建新的XxxTest实例, 实例变量的状态不会传递给下⼀个@Test⽅法, 单个@Test⽅法执⾏前后会执⾏@Before和@After⽅法1. 执⾏类的构造函数2. 执⾏@Before⽅法3. 执⾏@Test⽅法4. 执⾏@After⽅法3.5.2 代码实例:写⼀个整体的测试类如下:package javatest;/*** @ClassName SequenceTest* @Description TODO* @Author lingxiangxiang* @Date 1:54 PM* @Version 1.0**/import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;public class SequenceTest {@BeforeClasspublic static void setUpBeforeClass() throws Exception {System.out.println("BeforeClass()");}@AfterClasspublic static void tearDownAfterClass() throws Exception {System.out.println("AfterClass()");}@Beforepublic void setUp() throws Exception {System.out.println(" Before()");}@Afterpublic void tearDown() throws Exception {System.out.println(" After()");}public SequenceTest() {System.out.println(" new SequenceTest()");}@Testpublic void testA() {System.out.println(" testA()");}@Testpublic void testB() {System.out.println(" testB()");}@Testpublic void testC() {System.out.println(" testC()");}}如果运⾏整个类, 运⾏结果如下:BeforeClass()new SequenceTest()Before()testA()After()new SequenceTest()Before()testB()After()new SequenceTest()Before()testC()After()AfterClass()如果运⾏单个@Test类BeforeClass()new SequenceTest()Before()testA()After()AfterClass()3.6 异常测试异常测试可以通过@Test(expected=Exception.class), 对可能发⽣的每种类型的异常进⾏测试如果抛出了指定类型的异常, 测试成功如果没有抛出指定类型的异常, 或者抛出的异常类型不对, 测试失败例⼦:运⾏如下代码: 正常通过// 运⾏如下代码, 正常运⾏, 确实发⽣了ArithmeticException异常, 代码通过@Test(expected = ArithmeticException.class)public void testException() {int i = 1 / 0;}运⾏如下代码: 有报错信息@Test(expected = ArithmeticException.class)public void testException() {int i = 1 / 1;}执⾏结果如下:ng.AssertionError: Expected exception: ng.ArithmeticException3.7 参数化测试@RunWith: 当类被@RunWith注释修饰, 或者类继承了⼀个被该注解类修饰的类, JUnit将会使⽤这个注解所指明的运⾏器(runner)来运⾏测试, ⽽不是JUni默认的运⾏器要进⾏参数化测试,需要在类上⾯指定如下的运⾏器: @RunWith (Parameterized.class)然后,在提供数据的⽅法上加上⼀个@Parameters注解,这个⽅法必须是静态static的,并且返回⼀个集合Collection。
使用JUnit进行Java单元测试和Web应用程序调试
使用JUnit进行Java单元测试和Web应用程序调试JUnit是一种Java开发工具,可以用来进行单元测试和Web应用程序的调试。
JUnit在Java开发中非常重要,能够方便地测试Java应用程序的各种功能,发现问题并及时修复。
什么是单元测试?在编写Java应用程序时,我们写了很多小的代码片段,这些小片段被称为单元。
为了确保这些单元互相协调运作,我们需要进行测试,称为单元测试。
单元测试即在应用程序的每个单元上进行测试,以方便发现问题并迅速修复。
单元测试需要用到JUnit等测试工具。
在Java开发中,JUnit被广泛使用,并且是Java应用程序安全和可靠性的保证。
如何使用JUnit进行单元测试?安装JUnit通常,JUnit被打包为JAR文件,可以从其官方网站下载并安装。
安装完成后,需要配置环境变量,以便在Java开发中使用它。
在Linux操作系统中,可以通过apt-get命令或yum命令安装JUnit。
在Eclipse或IntelliJ等Java开发环境中,JUnit已经预装了。
编写测试用例在Java应用程序的单元测试中,需要编写测试用例。
一个测试用例对应一个功能,它包含输入,期望输出和具体操作过程。
例如,下面是一个测试用例:@Testpublic void testAdd() {Calculator calculator = new Calculator();int result = calculator.add(10, 20);assertEquals(30, result);}在这个测试用例中,我们测试了Calculator类的add方法,输入10和20,期望输出30。
如果add方法正确工作,测试将通过。
运行测试用例测试用例编写完成后,需要在JUnit上运行测试,以发现潜在问题。
在Eclipse和IntelliJ中,您可以右键单击测试代码,然后选择“运行单元测试”选项。
JUnit将开始运行测试,测试结果将在JUnit窗口中显示。
Junit4单元测试
Junit4单元测试Junit4单元测试第⼀部分⽤法1.1 常见功能典型配置:/*⽤于配置spring Boot中测试的环境*/@RunWith(SpringJUnit4ClassRunner.class)@SpringApplicationConfiguration(classes = MyBlogApplication.class)/* 开启事务,测试完成默认⾃动回滚,不会弄脏数据库 */@Transactionalpublic class WhoHaveWhatTagsMapperTest {@BeforeClasspublic static void beforeClass() {}@Beforepublic void setUp() throws Exception {}@Afterpublic void tearDown() throws Exception {}@Testpublic void insertWhoHaveWhatTags() throws Exception {}@Testpublic void selectBlogByTag() throws Exception {}@Testpublic void deleteWhoHaveWhatTags() throws Exception {}}@Test:把⼀个⽅法标记为测试⽅法两个属性:excepted;表⽰测试在执⾏中期望抛出的异常类型,如果不抛出,反⽽报错。
timeout:超时抛出异常。
单位毫秒@Test(timeout = 2000)@Test(expected = Exception.class)public void testFactorialException() throws Exception {new Math().factorial(-1);fail("factorial参数为负数没有抛出异常");}@Before:每⼀个测试⽅法执⾏前⾃动调⽤⼀次@After:每⼀个测试⽅法执⾏完⾃动调⽤⼀次@BeforeClass:所有测试⽅法执⾏前执⾏⼀次,在测试类还没有实例化就已经被加载,所以⽤static修饰@AfterClass:所有测试⽅法执⾏完执⾏⼀次,在测试类还没有实例化就已经被加载,所以⽤static修饰@Ignore:暂不执⾏该测试⽅法setup⽅法主要实现测试前的初始化⼯作teardown⽅法主要实现测试完成后垃圾回收⼯作!setup⽅法主要实现测试前的初始化⼯作,teardown⽅法主要实现测试完成后垃圾回收⼯作!测试⽅法的声明要求:名字可以随便取,没有任何限制,但是返回值必须为void,⽽且不能有任何参数。
在Eclipse中使用JUnit4进行单元测试(高级篇)
在Eclipse中使用JUnit4进行单元测试(高级篇)过前2篇文章,您一定对JUnit有了一个基本的了解,下面我们来探讨一下JUnit4中一些高级特性。
<!--[if !supportLists]-->一、<!--[endif]-->高级Fixture 上一篇文章中我们介绍了两个Fixture标注,分别是@Before 和@After,我们来看看他们是否适合完成如下功能:有一个类是负责对大文件(超过500兆)进行读写,他的每一个方法都是对文件进行操作。
换句话说,在调用每一个方法之前,我们都要打开一个大文件并读入文件内容,这绝对是一个非常耗费时间的操作。
如果我们使用@Before和@After,那么每次测试都要读取一次文件,效率及其低下。
这里我们所希望的是在所有测试一开始读一次文件,所有测试结束之后释放文件,而不是每次测试都读文件。
JUnit的作者显然也考虑到了这个问题,它给出了@BeforeClass 和 @AfterClass两个Fixture 来帮我们实现这个功能。
从名字上就可以看出,用这两个Fixture标注的函数,只在测试用例初始化时执行@BeforeClass方法,当所有测试执行完毕之后,执行@AfterClass进行收尾工作。
在这里要注意一下,每个测试类只能有一个方法被标注为@BeforeClass 或@AfterClass,并且该方法必须是Public和Static的。
<!--[if !supportLists]-->二、<!--[endif]-->限时测试。
还记得我在初级篇中给出的例子吗,那个求平方根的函数有Bug,是个死循环:public void squareRoot(int n) {for (; ;) ; //Bug : 死循环}如果测试的时候遇到死循环,你的脸上绝对不会露出笑容。
因此,对于那些逻辑很复杂,循环嵌套比较深的程序,很有可能出现死循环,因此一定要采取一些预防措施。
JUnit4测试报告
JIANGSU UNIVERSITY OF TECHNOLOGY 软件测试用例设计基于JUint4的单元测试用例设计与实现学院名称:计算机工程学院专业:软件工程班级:12软件1学号:12144133姓名:王慧二〇一五年五月目录基于JUint4的单元测试用例设计与实现 1一、需求分析 1二、测试工具介绍 2三、软件测试实现 3 附录1:相关代码9基于JUint4的单元测试用例设计与实现一、需求分析(一)软件测试软件测试(Software Testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。
换句话说,软件测试是一种实际输出与预期输出间的审核或者比较过程。
软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
软件测试模型有V、W、H、X等模型,其中V模型测试过程按4个步骤进行,即单元测试、集成测试、确认测试和系统测试及发布测试。
这其中单元测试与其他测试不同,单元测试可看作是编码工作的一部分,应该由程序员完成,也就是说,经过了单元测试的代码才是已完成的代码,提交产品代码时也要同时提交测试代码。
软件测试的测试目标是:1.发现一些可以通过测试避免的开发风险;2.实施测试来降低所发现的风险;3.确定测试何时可以结束;4.在开发项目的过程中将测试看作是一个标准项目。
(二)单元测试单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。
通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
经验表明一个尽责的单元测试方法将会在软件开发的某个阶段发现很多的Bug,并且修改它们的成本也很低。
它的优点如下:1.它是一种验证行为编写单元测试就是用来验证代码的行为是否与我们期望的一致。
有了单元测试,我们可以自信的交付自己的代码,而没有任何的后顾之忧。
2.它是一种设计行为编写单元测试将使我们从调用者观察、思考。
junit单元测试的基本用法
junit单元测试的基本用法JUnit是Java编程语言的一个单元测试框架,它提供了一种标准化的方式来编写和运行测试代码。
JUnit单元测试的基本用法包括以下几个步骤:1. 添加依赖首先,需要在项目中添加JUnit的依赖。
如果你使用的是Maven,可以在pom.xml文件中添加以下依赖:'''xml<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>'''如果你使用的是Gradle,可以在build.gradle文件中添加以下依赖:'''groovydependencies {testImplementation 'junit:junit:4.13.2'}'''2. 编写测试类创建一个Java类,并使用'@Test'注解来标记测试方法。
例如:'''javaimport org.junit.Test;import static org.junit.Assert.*;public class MyTest {@Testpublic void testAddition() {int result = 2 + 2;assertEquals(4, result);}}'''在上面的例子中,我们编写了一个测试方法'testAddition()',它使用'assertEquals()'方法来验证2 + 2的结果是否为4。
junit4osgi的使用
junit4osgi的使用介绍1.简介Junit4OSGi继承于junit的简单测试框架,可以在OSGI运行环境中进行测试。
针对集成测试或是需要在一个OSGI环境中进行单元测试。
结构如下:它分为三个部分:(1)Testsy stem 是真正的应用,被测试的系统(比如:声明式服务部分的测试)。
(2)Tests是包含测试代码的bundle,用来测试被测试的系统。
(3)Framework是测试框架,包括启动测试Runner和执行测试Runtime,在测试声明式服务中我们使用内嵌的loong框架作为测试框架。
2.使用Junit4OSGi进行测试的操作说明:(1)要对被测试的系统进行测试时,Tests必须是一个新建maven工程,测试的代码必须在src/main/java目录下,而不能在被测试部分src\test\java目录下直接写测试代码(比如要测试声明式服务loong-dservice-impl中的服务注册方面,我们不能在它的src\test\java目录下写测试代码)。
(2)所写的测试用例必须继承OSGiTestCase,这个类这个类继承自TestCase,并在它的基础上对OSGI中应用到的一些方法进行了封装,比如getBundle,getContext,getServiceObjects 等,方便在写测试代码时获取bundle或是服务的一些信息。
(3)在测试之前,要对测试代码所在工程的pom文件中进行如下信息的配置:1)添加测试时所需的依赖。
测试时所要用到的bundle通过添加依赖的方式添加到pom 文件中,其中loong-junit4osgi、loong-dservice-metadata为必须添加的依赖。
具体操作如下:<dependency><groupId>org.trustie.loong.modules.loong-dservice</groupId><artifactId>loong-junit4osgi</artifactId><version>0.1.0-SNAPSHOT</version></dependency><dependency><groupId>org.trustie.loong.modules.loong-dservice</groupId><artifactId>loong-dservice-metadata</artifactId><version>0.1.0-SNAPSHOT</version></dependency>2)配置所需的插件,必须配置loong-junit4osgi-plugin插件,如果对声明式服务进行测试时必需配置loong-dservice-plugin插件,具体操作如下:<plugin><groupId>org.trustie.loong.modules.loong-dservice</groupI><artifactId>loong-junit4osgi-plugin</artifactId><version>0.1.0-SNAPSHOT</version><executions><execution><goals><goal>test</goal></goals><configuration><framework>loong</framework></configuration></execution></executions></plugin><plugin><groupId>org.trustie.loong.modules.loong-dservice</groupId><artifactId>loong-dservice-plugin</artifactId><version>0.1.0-SNAPSHOT</version><executions><execution><goals><goal>dservice-bundle</goal></goals></execution></executions></plugin>其中在configuration中配置的框架为测试执行的框架,目前支持loong和Felix这两种。
(完整版)Junit4教程(实验指导书)
《软件测试技术》上机指导书之(一)使用JUNIT4进行单元测试JUnit4概述 (2)在Eclipse中使用JUnit4进行单元测试(初级篇) (5)在Eclipse中使用JUnit4进行单元测试(中级篇) (14)在Eclipse中使用JUnit4进行单元测试(高级篇) (16)实验目的:单元测试。
实验学时:4(2学时学习,2学时检查)实验要求:掌握JUNIT的使用方法。
检查要求:按学号每5人一组,分组检查掌握情况。
(1)初始成绩:1人为优秀,2-3人良好,1-2人中等。
组内推荐。
(2)最差的那个同学演示答辩,其成绩决定组内其他同学的成绩的整体水平。
(3)组内同学的成绩跟随答辩同学的成绩上下浮动。
张金荣重庆理工大学计算机科学与工程学院2013年3月9日JUnit4概述JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写.先简单解释一下什么是Annotation,这个单词一般是翻译成元数据。
元数据是什么?元数据就是描述数据的数据。
也就是说,这个东西在Java里面可以用来和public、static等关键字一样来修饰类名、方法名、变量名。
修饰的作用描述这个数据是做什么用的,差不多和public描述这个数据是公有的一样。
想具体了解可以看Core Java2。
废话不多说了,直接进入正题。
我们先看一下在JUnit 3中我们是怎样写一个单元测试的。
比如下面一个类:public class AddOperation {public int add(int x,int y){return x+y;}}我们要测试add这个方法,我们写单元测试得这么写:import junit。
framework。
TestCase;import static org。
junit.Assert。
*;public class AddOperationTest extends TestCase{public void setUp() throws Exception {}public void tearDown() throws Exception {}public void testAdd() {System.out。
在Eclipse中使用JUnit4进行单元测试(初级篇)
我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的。
但是,我们同时应该确保每一个函数都完全正确,因为如果我们今后如果对程序进行扩展,用到了某个函数的其他功能,而这个功能有bug的话,那绝对是一件非常郁闷的事情。
所以说,每编写完一个函数之后,都应该对这个函数的方方面面进行测试,这样的测试我们称之为单元测试。
传统的编程方式,进行单元测试是一件很麻烦的事情,你要重新写另外一个程序,在该程序中调用你需要测试的方法,并且仔细观察运行结果,看看是否有错。
正因为如此麻烦,所以程序员们编写单元测试的热情不是很高。
于是有一个牛人推出了单元测试包,大大简化了进行单元测试所要做的工作,这就是JUnit4。
本文简要介绍一下在Eclipse3.2中使用JUn it4进行单元测试的方法。
首先,我们来一个傻瓜式速成教程,不要问为什么,Follow Me ,先来体验一下单元测试的快感!首先新建一个项目叫JUnit_Test,我们编写一个Calculator类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。
这个类并不是很完美,我们故意保留了一些Bug 用于演示,这些Bug在注释中都有说明。
该类代码如下:public class Calculator {private static int result; //静态变量,用于存储运行结果public void add( int n) {result = result + n;public void substract( int n) { result = result - 1;//Bug:正确的应该是 result =result -npublic void multiply( int n) {//此方法尚未写好public void divide( int n) { result = result / n;public void square( int n) { result = n * n;public void squareRoot( int n) { for (; ;) ;//Bug : 死循环public void clear() { // 将结果清零public int getResult() { return result;第二步,将JUnit4单元测试包引入这个项目:在该项目上点右键, 点属性”如图:—卜艸result = 0;File Edit Scirce Reactor Maviqate Search Project Run Wfridcw, Help ■希書吐&〒 訂 &—JUnft:占 Formaklest''S 日JI 丁锻 2 GUITestlr _r I.'.I? ILaveRennennberWartls J T J*戸JUn#4 Testil> src卜 ft :P£ Sysl 卜» JUhit 吟'M/CbckLzr Servers s> 'U test|::严pr ivate stat lc Ca leu la. tor calculstt-or@Beicre13puti 1 ic void setUp () throwsExc&ptiDncalculator , clear ():国 Gaku^tWijsvaljO C^kul^rT^tlijoya 圖 NewCo Into—叮pen in Mew WindowOpen Type Hieurch^网void testAddU { Lculator . add.(2);二 <op/Ctrl+<sertEquals (5 f tor. getReaCop/ Quaff isd Nam&^7=. PasteCtrl+V乂 CeleteD&latevoid tescSut )stracE ()(B LI I L I Path► Lculator , ^dd.( 10):Source ^lt+Shift+-5Lculatcir.suijstraLct (2):Fefac^orAlt+ShiFt-hT卜 5er tEquals ( S f .tar ・ get-Res^Import...口 Expirt .. iP* Multiply () Wot 7&c imp 1 erne nrF呂_ RefreshClose PnojectClose Unrelated Projectsvoid teatMult ip 1y (){Run As Cetiuci As Erohle As Validate TgamCofnpare WithRestore From Lot ml Hestor^...PDE TQils」nv 日Persisten 匚亡Declaration 匚onsole在弹出的属性窗口中,首先在左边选择 “Java Build Path ”,然后到右上选择“Libraries标签,之后在最右边点击 “Add Library …按钮,如下图所示:然后在新弹出的对话框中选择JUnit4并点击确定,如上图所示,JUnit4软件包就被包含进我们这个项目了。
JUnit4使用入门指南
JUnit4使用入门指南*以下的内容以Eclipse上的JUnit为准现在的Eclipse中一般都自带了JUnit组件,包含两个版本:JUnit3和JUnit4,由于Junit4引入了java 5.0的注释技术,所以写起测试用例更方便,有些注解方法非常人性化。
简单介绍一下JUnit4的特性:1. JUnit4引入了类范围的setUp() 和tearDown() 方法。
任何用@BeforeClass 注释的方法都将在该类中的测试方法运行之前刚好运行一次,而任何用@AfterClass注释的方法都将在该类中的所有测试都运行之后刚好运行一次。
2. 异常测试:异常测试是Junit4中的最大改进。
Junit3的异常测试是在抛出异常的代码中放入try块,然后在try块的末尾加入一个fail()语句。
例如除法方法测试一个被零除抛出一个ArithmeticException:该方法不仅难看,而且试图挑战代码覆盖工具,因为不管测试是否通过还是失败,总有一些代码不被执行。
在JUni4中,可以编写抛出异常的代码,并使用注释来声明该异常是预期的:如果没有异常抛出或者抛出一个不同的异常,那么测试就将失败。
3. JUnit4添加了两个比较数组的assert() 方法:public static void assertEquals(Object[] expected,Object[]actual)public static void assertEquals(String message, Object[]expected,Object[] actual)这两个方法以最直接的方式比较数组:如果数组长度相同,且每个对应的元素相同,则两个数组相等,否则不相等。
数组为空的情况也作了考虑。
4. JUnit 4引入了注解技术,下面列出常用的几个annotation 介绍a). @Before:初始化方法,在任何一个测试执行之前必须执行的代码;b). @After:释放资源,在任何测试执行之后需要进行的收尾工作;c). @Test:测试方法,表明这是一个测试方法。
采用JUnit4进行单元测试
采用JUnit4进行单元测试1、再产生一个测试项目 JUnit4TestProject2、在本测试项目中引用应用项目3、在测试项目中添加JUnit4的系统包文件4、对Calculator类添加对应的测试用例类 TestCalculatorJUnit4将产生出下面的模板程序package com.px1987.junit4;import static org.junit.Assert.*;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;public class TestCalculatorJUnit4 {@BeforeClasspublic static void setUpBeforeClass() throws Exception {}@AfterClasspublic static void tearDownAfterClass() throws Exception {}@Beforepublic void setUp() throws Exception {}@Afterpublic void tearDown() throws Exception {}@Testpublic void testAdd() {fail("Not yet implemented");}}5、对上面的代码进行说明(1)与JUnit4框架有关的系统包注意在测试类中所用到的与JUnit4框架有关的系统包,最主要的是是org.junit.*。
把它包含进来之后,绝大部分功能就有了。
还有一句话也非常地重要“import static org.junit.Assert.*;”,我们在测试的时候所使用的一系列assertEquals方法就来自这个包。
Junit4单元测试
1.单元测试规范单元测试使用Junit4进行测试,Eclipse内置了Junit4的支持。
1)测试类命名在项目的DAO与service层的实现类都必须编写测试用例,action由于struts2.0支持测试,所以也应该测试:1.测试用例命名规则为:类名+ Test。
(junit4支持非这样的命名方式,但是为了统一管理,还是采用这样的方式命名)2.建立一个和src平行的test包,所有测试用例都放在相应的包内,便于统一管理,合成测试套件。
3.同一个包的测试用例,合成一个测试套件。
4.整个工程的测试套件,合成一个统一的测试套件。
2)测试用例的编写1.测试方式都是test开头的方法(testXXXX),JUnit按照在测试用例中的顺序执行。
测试方法可以和被测试的方法一一对应,测试方法也可以包含多个被测试的方法。
2.测试方法中,使用断言(assertXXX和fail,详细资料请查阅JUnit文档)来进行测试结果判断,也可以辅以文字打印说明,如果测试程序抛出异常,则显示为错误,如果断言失败,则显示故障。
3.测试用例必须覆盖被测试类、方法的所有功能,包括正常情况、异常情况和发生错误的情况都必须覆盖,才能保证测试的完整性。
3)测试数据的准备为了防止数据库的更改对测试结果的影响,测试数据由统一的sql脚本来创建,测试前执行一下脚本创建数据。
也可以使用数据回滚的方式进行与数据相关的测试。
4)实体层的测试由于本次项目的Entity model由之前的贫血模型改为到充血模型,所以对于Entity 的测试不能够再忽略,对于Entity自身的除set/get以为的方法都应该进行单元测试。
5)DAO层的测试每一个DAO类都必须编写测试用例,对DAO的每一个公开方法进行测试,测试用例必须使用有代表性的测试代码,覆盖的所有可能的输入和输出情况,包括创建,更改,删除对象以及输入错误数据等测试。
6)Service层的测试Service层的测试必须测试Service对象是否满足功能要求,事务完整性等功能。
junit4 使用说明
junit4 使用说明测试任何可能的错误。
单元测试不是用来证明您是对的,而是为了证明您没有错。
2、单元测试代码和被测试代码使用一样的包,不同的目录。
--junit4.0使用注意说明;3、测试方法必须按照规范书写1. 测试方法必须使用注解 org.junit.Test 修饰。
2. 测试方法必须使用 public void 修饰,而且不能带有任何参数。
@Test public void wordFormat4DBegin(){String target = "EmployeeInfo";String result = WordDealUtil.wordFormat4DB(target);assertEquals("employee_info", result);}4、同一测试类中的所有测试方法都可以共用它来初始化 Fixture 和注销 Fixture。
和编写 JUnit 测试方法一样,公共 Fixture 的设置也很简单,您只需要:1. 使用注解 org,junit.Before 修饰用于初始化 Fixture 的方法。
2. 使用注解 org.junit.After 修饰用于注销 Fixture 的方法。
3. 保证这两种方法都使用 public void 修饰,而且不能带有任何参数。
//初始化Fixture方法@Before public void init(){……}//注销Fixture方法@After public void destroy(){……}引入了类级别的 Fixture 设置方法,编写规范如下:1. 使用注解 org,junit.BeforeClass 修饰用于初始化 Fixture 的方法。
2. 使用注解 org.junit.AfterClass 修饰用于注销 Fixture 的方法。
3. 保证这两种方法都使用 public static void 修饰,而且不能带有任何参数//类级别Fixture初始化方法@BeforeClass public static void dbInit(){……}//类级别Fixture注销方法@AfterClass public static void dbClose(){……}类级别的 Fixture 仅会在测试类中所有测试方法执行之前执行初始化,并在全部测试方法测试完毕之后执行注销方法。
浅谈junit4单元测试高级用法
浅谈junit4单元测试⾼级⽤法Junit单元测试框架是程序开发必备的测试利器,现在最常⽤的就是Junit4了,在Junit4中所有的测试⽤例都使⽤了注解的形式,这⽐Junit3更加灵活与⽅便。
之前在公司的关于单元测试的培训课程中,讲师仅仅讲述了Junit4的基本的与⽣命周期相关的注解的使⽤,主要包括@BeforeClass、@Before、@Test、@After、@AfterClass这些注解,这些在应付普通简单的单元测试已经⾜够,然⽽有很多更加复杂且也会经常遇到的测试需求依靠这些⽣命周期注解并不能完成!因此这篇分享将为您呈现Junit4的另⼀⽚新⼤陆,且看陈述…其实,在单元测试培训课程中,讲师并没有讲到Junit4的核⼼,例如为什么Junit没有main()⽅法就能运⾏(因为我们知道⽆论是什么程序都必须得有⼀个程序⼊⼝,⽽它通常是main);在例如Junit的核⼼组成部分是什么?如何更改Junit在运⾏单元测试时获取数据和执⾏测试的⾏为?更具体⼀点,如果我要为⼀个需要两个参数的⽅法进⾏测试,如何使⽤我所提供的参数的所有排列组合对⽅法进⾏测试?如果我需要在茫茫的测试⽤例中只测试与特定类相关的⽤例该怎么做…….在这之前,先纠正⼀点------Junit4可以直接运⾏我们的某个⽅法,没有main⼊⼝函数是断然不⾏的。
正如我之前给我们组的⼀个妹⼦讲Spring的时候告诉她,在测试⽅法中,对测试⽅法所在的类添加Spring的 (Compent注解或者为该类的成员变量添加)Resource注解并没有什么卵⽤,即Spring根本不会来扫描这个测试类,更不会为这个类注⼊属性值。
为什么这么说呢?因为Spring是在测试类中由被@Before标注的⽅法所启动的,这时候,JVM已经将此测试类实例化了,⽽这并不是由Spring实例化的,Spring晚了⼀步,所以在Spring的容器中并没有此类的实例。
那么Junit4真的有main⽅法吗?没错,既然它能直接运⾏我们的⽅法,那它必然⾃⼰为JVM提供了程序⼊⼝。
JUnit单元测试讲解
谢谢!
JUnit单元测试-基于JUnit4.x
单元测试
• 是在开发过程中要进行的最低级别的测试活动。 • 是需要与开发同步进行的工作。 • 属于编码的一部分。有程序员自己完成。 • 是为了确保类的某一个特定方法能成功执行一系列特定的
任务。每个测试都确保只要给定输入,方法将输出预期的 结果。
单元测试测什么?
进入Test
• 现阶段使用Junit主要是为了测试dao层的增删改查等方法是否可以正常执行
第一个测试:
测试JDBC连接数据库
断言:assert 断言:期望值与测试值是否相同
1.assertEquals();8个重载,用于查看对象中存的值是否是期望值,与字符串 比较中的equals()类似。
2.assertFalse()和assertTrue();2个重载,用于测试返回值为boolean类型
3.assertSame()和assertNotSame();2个重载,用于比较两个对象的引用是否 相等和不相等。类似==和!=比较对象。
4.assertNull()和assertNotNull();2个重载,用于查看对象是否为空和不为空
5.fail用于抛出错误,终止测试。
编写测试方法前的准备工作
(2)测试方法需要满足的条件 : public的 void的 无方法参数的 方法名以test开头 后面加上要测试的方法 <同方法的多个测试方法用数字区分>
JUnit4.x标签
• JUnit4.x支持注解配置,不需要继承TestCase类。使用注解标 签。导入相应的包即可。
• 常用标签:
• @Test测试方法 • @BeforeClass 在测试初始化时执行一次(必须是public和static的) • @Before每次执行@Test方法测试前执行(主要用于初始化) • @Ignore忽略测试(该测试不执行) • @After每次执行@Test方法测试后执行(主要用于清理资源) • @AfterClass所有测试结束后执行(必须是public和static的) • @Test(timeout = *)显示测试 timeout毫秒数 • @Test(expected=*.class)测试异常expected异常类 • @SuiteClasses打包测试
使用JUnit进行Java单元测试的步骤和方法
使用JUnit进行Java单元测试的步骤和方法在软件开发过程中,单元测试是非常重要的一环。
它可以帮助开发人员验证代码的正确性,减少错误的发生,并且提高代码的可维护性。
JUnit是一个非常流行的Java单元测试框架,它提供了一系列的工具和方法来简化单元测试的编写和执行。
本文将介绍使用JUnit进行Java单元测试的步骤和方法。
一、引入JUnit依赖在开始使用JUnit之前,首先需要在项目的构建工具中引入JUnit的依赖。
如果使用Maven进行项目管理,可以在项目的pom.xml文件中添加如下依赖:```xml<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>```二、编写测试类在编写单元测试之前,需要先编写待测试的代码。
假设我们有一个名为Calculator的类,其中包含了加法、减法等基本运算的方法。
现在我们希望对这些方法进行单元测试。
首先,创建一个名为CalculatorTest的测试类,并在类的顶部添加`@RunWith`注解,指定JUnit的运行器。
接着,定义一个Calculator对象作为被测试的实例,并使用`@Before`注解标记一个方法,在每个测试方法执行前进行初始化。
```javaimport org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;@RunWith(JUnit4.class)public class CalculatorTest {private Calculator calculator;@Beforepublic void setUp() {calculator = new Calculator();}// 测试方法将在下文中介绍}```三、编写测试方法在测试类中,可以使用`@Test`注解标记一个方法作为测试方法。
在Eclipse中如何进行JUnit4版本的单元测试
} catch(ArithmeticException success){
assertNotNull(success.getMessage()); }
杨教授工作室,版权所有,盗版必究, 10/19 页
return oneDigit+twoDigit; } public int sub(int oneDigit, int twoDigit){
return oneDigit-twoDigit; } public int mul(int oneDigit, int twoDigit){
杨教授工作室,版权所有,盗版必究, 3/19 页
杨教授工作室,版权所有,盗版必究, 5/19 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
5、对被测试的 Calculator 类添加对应的测试用例类 TestCalculatorJUnit4 (1)测试用例类的名称遵守“Test + 原类名”
(2)选择被测试的目标方法
杨教授工作室,版权所有,盗版必究, 6/19 页
fail("Not yet implemented"); } @Test public void testSub() {
fail("Not yet implemented"); } @Test
杨教授工作室,版权所有,盗版必究, 7/19 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
public void testMul() { fail("Not yet implemented");
junit4单元测试--web项目中模拟登录会话,做全流程测试
junit4单元测试--web项⽬中模拟登录会话,做全流程测试junit4相对于junit3,基于注解的⽅式写单元测试⽤例,使⽤过程中⽅便很多。
如下缩写均是代码⽚段,摘录其中关键部分,重要是理解其中知识点。
⼀、编写测试⽤例基类@RunWith(SpringJUnit4ClassRunner.class)@WebAppConfiguration@ContextConfiguration({"file:src/main/webapp/WEB-INF/applicationContext.xml", "file:src/main/webapp/WEB-INF/spring-servlet.xml","file:src/main/webapp/WEB-INF/conf/spring-redis.xml", "file:src/main/webapp/WEB-INF/conf/spring-resttemplate.xml"})public abstract class BaseJunit{/*** wac*/@Autowiredprivate WebApplicationContext wac;/*** MockMvc*/private MockMvc mockMvc;protected WebApplicationContext getWac(){return this.wac;}protected MockMvc getMockMvc(){return this.mockMvc;}/*** 初始化mocMvc** @see*/@Beforepublic void setUp(){this.mockMvc = webAppContextSetup(this.wac).build();}......}@RunWith(SpringJUnit4ClassRunner.class) 指定采⽤Spring的运⾏环境@WebAppConfiguration ⽤来声明这是⼀个web测试环境@ContextConfiguration ⽤来指定加载项⽬的配置⽂件⼆、抽出web系统登录⽅法public abstract class BaseLoginJunit extends BaseJunit{/*** MockMvc*/private MockHttpSession session;protected MockHttpSession getSession(){return session;}/*** 测试前,初始化系统登录** @see*/@Beforepublic void setUp(){super.setUp();this.session = (MockHttpSession)getLoginSession();}/*** 完成登录功能,返回当前登录会话** @return HttpSession* @see*/private HttpSession getLoginSession(){String url = "/xxx/login";String params = "{\"userName\":\"xxx\",\"password\":\"xxx\",\"verifyCode\":\"xxx\"}";MvcResult result = null;try{result = getMockMvc().perform(MockMvcRequestBuilders.post(url).accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON_UTF8_VALUE).content( params)).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print()).andReturn();}catch (Exception e){e.printStackTrace();}return result.getRequest().getSession();}......}三、编写spring控制器测试⽅法@FixMethodOrder(_ASCENDING) // 指定按字母顺序执⾏测试⽤例public class ResourceControllerTest extends BaseLoginJunit{/*** res id list*/private static List<String> RES_LIST = new ArrayList<>();/*** 测试 getResource** @see*/@Testpublic void testGetResource(){String url = "/xxx/get";MultiValueMap<String, String> map = new LinkedMultiValueMap<>();this.setPage(map);get(url, map);}/*** 测试 add** @see*/@Testpublic void testAddResource(){String url = "/xxx/add";ResourceBean bean = new ResourceBean();ResourceBean anotherBean = new ResourceBean();bean.setResName("test res1");anotherBean.setResName("test res2");MvcResult result = post(url, JSONObject.toJSONString(bean));ReturnVal returnVal = this.getReturnVal(result);RES_LIST.add(returnVal.getData().getId());MvcResult anotherResult = post(url, JSONObject.toJSONString(childBean));ReturnVal anotherReturnVal = this.getReturnVal(anotherResult);RES_LIST.add(anotherReturnVal.getData().getId());}/*** 测试updateResource** @see*/@Testpublic void testBupdateResource(){String url = "/xxx/update";ResourceBean bean = new ResourceBean();bean.setId(RES_LIST.get(0));bean.setResName("test res1");MvcResult result = post(url, JSONObject.toJSONString(bean));assertEquals(AbstractController.STATUS_SUCCESS, getReturnVal(result).getStatus());}/*** 测试delResource** @see*/@Testpublic void testCdelResource(){String url = "/xxx/delete";MultiValueMap<String, String> map = new LinkedMultiValueMap<>();map.add("id", RES_LIST.remove(0));MvcResult result = get(url, map);assertEquals(AbstractController.STATUS_SUCCESS, getReturnVal(result).getStatus());}/*** 测试batchDelResource** @see*/@Testpublic void testDbatchDelResource(){String url = "/xxx/batchDel";MultiValueMap<String, String> map = new LinkedMultiValueMap<>();StringBuilder params = new StringBuilder();for (int i = 0; i < RES_LIST.size(); i++ ){if (i == RES_LIST.size() - 1){params.append(RES_LIST.get(i));}else{params.append(RES_LIST.get(i)).append(",");}}map.add("id", params.toString());MvcResult result = get(url, map);assertEquals(AbstractController.STATUS_SUCCESS, getReturnVal(result).getStatus());}}以上测试⽤例中,@FixMethodOrder很关键,因为增、删、改、查需要指定测试的顺序。