JUnit测试框架的使用经验分享
2023-09-11 14:19:44 时间
1)把Junit引入当前项目库中
新建一个 Java 工程—coolJUnit,打开项目coolJUnit 的属性页 - 选择“Java Build Path”子选项 - 点选“Add Library…”按钮 - 在弹出的“Add Library”对话框中选择 JUnit,并在下一页中选择版本 Junit 4 后点击“Finish”按钮。这样便把 JUnit 引入到当前项目库中了。
2)新建单元测试代码目录
单元测试代码是不会出现在最终软件产品中的,所以最好为单元测试代码与被测试代码创建单独的目录,并保证测试代码和被测试代码使用相同的包名。这样既保证了代码的分离,同时还保证了查找的方便。遵照这条原则,在项目 coolJUnit 根目录下添加一个新目录 testsrc,并把它加入到项目源代码目录中。
3)在工程中添加类
添加类SampleCaculator,类中有两个方法,分别计算加减法。编译代码。
为类SampleCalculator添加测试用例。在资源管理器SampleCalculator.java文件处右击选new 选Junit Test Case(见图4),Source foler选择testsrc目录,点击next,选择要测试的方法,这里把add和subtration方法都选上,最后点finish完成。 Junit自动生成测试类SampleCalculatorTest,修改其中的代码(如下)。 其中assertEquals断言,用来测试预期目标和实际结果是否相等。 assertEquals( [Sting message], expected, actual ) expected是期望值(通常都是硬编码的),actual是被测试代码实际产生的值,message是一个可选的消息,如果提供的话,将会在发生错误时报告这个消息。 如想用断言来比较浮点数(在Java中是类型为float或者double的数),则需指定一个额外的误差参数。 assertEquals([Sting message], expected, actual, tolerance) 其它断言参见课本和参考书介绍。测试方法需要按照一定的规范书写: 1. 测试方法必须使用注解 org.junit.Test 修饰。 2. 测试方法必须使用 public void 修饰,而且不能带有任何参数。 5)查看运行结果 在测试类上点击右键,在弹出菜单中选择 Run As JUnit Test。运行结果如下图,绿色的进度条提示我们,测试运行通过了。
B、Junit使用方法示例2 1)在工程中添加类 类WordDealUtil中的方法wordFormat4DB( )实现的功能见文件注释。
* 格式化后的数据为小写字母,并且使用下划线分割命名单词 * 例如:employeeInfo 经过格式化之后变为 employee_info * @param name Java对象名称 public static String wordFormat4DB(String name){ Pattern p = Pattern.compile("[A-Z]"); Matcher m = p.matcher(name); StringBuffer strBuffer = new StringBuffer(); while(m.find()){ //将当前匹配子串替换为指定字符串, //并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里 m.appendReplacement(strBuffer, "_"+m.group()); //将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里 return m.appendTail(strBuffer).toString().toLowerCase();
String result = WordDealUtil.wordFormat4DB(target); assertEquals("employee_info", result);
3)进一步完善测试用例 单元测试的范围要全面,如对边界值、正常值、错误值的测试。运用所学的测试用例的设计方法,如:等价类划分法、边界值分析法,对测试用例进行进一步完善。继续补充一些对特殊情况的测试:
String result = WordDealUtil.wordFormat4DB(target); assertEquals("employee_info", result); //测试当尾字母为大写时的情况 @Test public void wordFormat4DBEnd(){ String target = "employeeInfoA"; String result = WordDealUtil.wordFormat4DB(target); assertEquals("employee_info_a", result); //测试多个相连字母大写时的情况 @Test public void wordFormat4DBTogether(){ String target = "employeeAInfo"; String result = WordDealUtil.wordFormat4DB(target); assertEquals("employee_a_info", result);
4)查看分析运行结果,修改错误代码 再次运行测试。JUnit 运行界面提示我们有两个测试情况未通过测试(见图6),当首字母大写时得到的处理结果与预期的有偏差,造成测试失败(failure);而当测试对 null 的处理结果时,则直接抛出了异常——测试错误(error)。显然,被测试代码中并没有对首字母大写和 null 这两种特殊情况进行处理,修改如下:
2、使用Junit框架对类Date和类DateUtil(参见附录)进行单元测试。 只对包含业务逻辑的方法进行测试,包括: 类Date中的 isDayValid(int year, int month, int day) isMonthValid(int month) isYearValid(int year) 类DateUtil中的 isLeapYear(int year) getDayofYear(Date date) 最新内容请见作者的GitHub页:http://qaseven.github.io/
TestNG 和 Junit 作为两大流行的测试框架,有哪些区别?各有哪些优缺点?该如何选择呢?这里简要总结下: ![](https://ceshiren.com/uploads/default/original/3X/7/3/731391a1eddb1e44ccb4a50bedbe0df0cbdaf138.png) ![](https://ceshiren.com/uploads/def
TestNG 和 Junit 作为两大流行的测试框架,有哪些区别?各有哪些优缺点?该如何选择呢?这里简要总结下: ![](https://ceshiren.com/uploads/default/original/3X/7/3/731391a1eddb1e44ccb4a50bedbe0df0cbdaf138.png) ![](https://ceshiren.com/uploads/def
为类SampleCalculator添加测试用例。在资源管理器SampleCalculator.java文件处右击选new 选Junit Test Case(见图4),Source foler选择testsrc目录,点击next,选择要测试的方法,这里把add和subtration方法都选上,最后点finish完成。 Junit自动生成测试类SampleCalculatorTest,修改其中的代码(如下)。 其中assertEquals断言,用来测试预期目标和实际结果是否相等。 assertEquals( [Sting message], expected, actual ) expected是期望值(通常都是硬编码的),actual是被测试代码实际产生的值,message是一个可选的消息,如果提供的话,将会在发生错误时报告这个消息。 如想用断言来比较浮点数(在Java中是类型为float或者double的数),则需指定一个额外的误差参数。 assertEquals([Sting message], expected, actual, tolerance) 其它断言参见课本和参考书介绍。测试方法需要按照一定的规范书写: 1. 测试方法必须使用注解 org.junit.Test 修饰。 2. 测试方法必须使用 public void 修饰,而且不能带有任何参数。 5)查看运行结果 在测试类上点击右键,在弹出菜单中选择 Run As JUnit Test。运行结果如下图,绿色的进度条提示我们,测试运行通过了。
B、Junit使用方法示例2 1)在工程中添加类 类WordDealUtil中的方法wordFormat4DB( )实现的功能见文件注释。
* 格式化后的数据为小写字母,并且使用下划线分割命名单词 * 例如:employeeInfo 经过格式化之后变为 employee_info * @param name Java对象名称 public static String wordFormat4DB(String name){ Pattern p = Pattern.compile("[A-Z]"); Matcher m = p.matcher(name); StringBuffer strBuffer = new StringBuffer(); while(m.find()){ //将当前匹配子串替换为指定字符串, //并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里 m.appendReplacement(strBuffer, "_"+m.group()); //将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里 return m.appendTail(strBuffer).toString().toLowerCase();
String result = WordDealUtil.wordFormat4DB(target); assertEquals("employee_info", result);
3)进一步完善测试用例 单元测试的范围要全面,如对边界值、正常值、错误值的测试。运用所学的测试用例的设计方法,如:等价类划分法、边界值分析法,对测试用例进行进一步完善。继续补充一些对特殊情况的测试:
String result = WordDealUtil.wordFormat4DB(target); assertEquals("employee_info", result); //测试当尾字母为大写时的情况 @Test public void wordFormat4DBEnd(){ String target = "employeeInfoA"; String result = WordDealUtil.wordFormat4DB(target); assertEquals("employee_info_a", result); //测试多个相连字母大写时的情况 @Test public void wordFormat4DBTogether(){ String target = "employeeAInfo"; String result = WordDealUtil.wordFormat4DB(target); assertEquals("employee_a_info", result);
4)查看分析运行结果,修改错误代码 再次运行测试。JUnit 运行界面提示我们有两个测试情况未通过测试(见图6),当首字母大写时得到的处理结果与预期的有偏差,造成测试失败(failure);而当测试对 null 的处理结果时,则直接抛出了异常——测试错误(error)。显然,被测试代码中并没有对首字母大写和 null 这两种特殊情况进行处理,修改如下:
2、使用Junit框架对类Date和类DateUtil(参见附录)进行单元测试。 只对包含业务逻辑的方法进行测试,包括: 类Date中的 isDayValid(int year, int month, int day) isMonthValid(int month) isYearValid(int year) 类DateUtil中的 isLeapYear(int year) getDayofYear(Date date) 最新内容请见作者的GitHub页:http://qaseven.github.io/
TestNG 和 Junit 作为两大流行的测试框架,有哪些区别?各有哪些优缺点?该如何选择呢?这里简要总结下: ![](https://ceshiren.com/uploads/default/original/3X/7/3/731391a1eddb1e44ccb4a50bedbe0df0cbdaf138.png) ![](https://ceshiren.com/uploads/def
TestNG 和 Junit 作为两大流行的测试框架,有哪些区别?各有哪些优缺点?该如何选择呢?这里简要总结下: ![](https://ceshiren.com/uploads/default/original/3X/7/3/731391a1eddb1e44ccb4a50bedbe0df0cbdaf138.png) ![](https://ceshiren.com/uploads/def
相关文章
- 06-编写Hibernate API编写访问数据库的代码,使用Junit进行测试
- [JUnit] Assumption and assertAll
- [Unit testing Java] Unit testing Junit Controller
- [JUnit] Introduce to Junit and it annotations
- 深入JUnit源码之Assert与Hamcrest
- IDEA 运行junit单元测试方法
- Junit初级篇
- java junit Assert断言用法示例: Assert.assertEquals(期望的结果,运算的结果)
- JUnit 注解@Category的工作原理
- Junit 模拟 MockMultipartFile 文件测试
- 单元测试 报错 org.junit.runners.model.InvalidTestClassError: Invalid test class 'com.example.xxx' 解决
- 【错误记录】Android Studio 编译时 lint 检查报错 ( Could not resolve junit:junit:4.+. )
- JavaSE学习总结(十九)—— Java Web 综合应用(JSP、Servlet、IDEA、MySQL、JUnit、AJAX、JSON)
- Shiro Quartz之Junit測试Session管理
- 021-Spring Boot 测试,Junit方式使用,mock方式,Controller测试
- JUnit使用参数测试和一组测试
- 你知道 Junit 是怎么跑的吗?
- 在命令行中运行JUnit测试