java学习脚印:java工具早使用——Maven与Junit
来源:互联网 发布:linux 解压到当前目录 编辑:程序博客网 时间:2024/05/22 14:15
java学习脚印:java工具早使用——Maven与Junit(敏捷版博客)
写在前面
正所谓“工欲善其事,必先利其器”,当项目越来越大的时候,项目管理和测试开始变得困难,借助成熟的工具是关键。
个人赞同,一开始创建项目或者编写代码时,就提倡内置项目管理,软件测试技术这种项目开发的思想,这是一种积极的思想,避免以后的混乱和返工。
这里对项目管理工具Maven和JUnit作一个了解和简单运用,不做细致探讨,细节问题留待以后实际工作中学习和解决。
1.Maven在项目管理中的积极作用
1.1Maven能干什么
Apache Maven由Apache软件基金会所提供,一个软件(特别是Java软件)项目管理及自动构建工具。
与之前的Ant管理工具相比,有了更大的改进。它能提供以下功能:
- Builds 编译工程的源代码,生成类文件,并提供程序打包等功能
- Documentation 程序文档包括网站的自动生成
- Reporting 生成报告
- Dependencies 这是maven最大特色之一。它能较好的管理项目中包之间的依赖关系,尤其是jar包的嵌套依赖关系;同时多个项目的编译依赖也都能解决。
- SCMs
- Releases
- Distribution
maven的安装,以及集成到eclipse环境可参考: 博客园 maven安装、配置及使用入门一文。
1.2 maven快速构造一个项目
可以使用终端执行mvn命令构造项目,这里利用maven-archetype-quickstart模板快速构造一个项目如下:
ubuntu终端中运行(windows中dos窗口运行命令类似):
wangdq@wangdq:~/MVN$ mvn archetype:generate -DgroupId=cn.edu.gdut -DartifactId=MyApp -DarchetypeArifactId=maven-archetype-quickstart -DinteractiveMode=false
构造完成后,终端提示:...[INFO] BUILD SUCCESS
表示构造成功,查看文件目录,得到如下结构:
wangdq@wangdq:~/MVN$ tree MyApp/
MyApp/
├── pom.xml
└── src
├── main
│ └── java
│ └── cn
│ └── edu
│ └── gdut
│ └── App.java
└── test
└── java
└── cn
└── edu
└── gdut
└── AppTest.java
这样一个简单的java工程就构造完毕,构造完成后可通过pom.xml(maven的项目对象模型对应的配置文件)来管理项目中jar包的依赖关系,也可以用相应命令来打包应用。
也可以利用集成的eclipse环境,构造maven工程,eclipse中构造项目更方便快捷。
2.Junit在测试中的积极作用
2.1 JUnit可以做什么
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。
手工测试和自动化工具自动测试相比:
1)不由工具支持的手工测试
耗时且单调:测试由人执行,速度慢,且枯燥。
人力的较大支出:手动测试需要更多的测试员,投入较大
可行度降低:每次执行测试不可能都那么准确,难免出错
不可编制的:对于需要发现隐含问题的复杂测试用例难以编写
2)工具支持的自动测试
快速自动化执行测试用例,比人工快多了
自动化工具执行测试,不需要投入过多的人力了
自动化测试工具每次测试的结果相同且准确,更可信
测试员可编写复杂的测试用例用于发现隐含问题
JUnit具有以下特性:
- 提供注释(Annotation)来标记需要测试的方法
- 提供断言(Assertions)来判断测试结果
- 提供suites测试,可以组合小的测试用例成为suites测试,一次执行多个测试用例
- 提供参数化的测试,可以提供多个值的数组供测试
2.2Juint实例——关于判断直角三角形程序的测试
这里假设需要编写一个程序,判断输入的三个整数是否能构成直角三角形。
为简化问题,这里假设输入的数字都是整数,则生成直角三角形规则如下:
1)a,b.c是为都为正整数输入,若不是返回false;
2)a,b,c输入能否构成三角形,即满足基本条件:三角形两边之和大于第三边,若否则返回false;
3)a,b,c输入能否构成直角三角形,即满足:较大者的平方和等于另外两者的平方和,若否则返回false,若是则判断结束,返回true.
下面给出一个简单的示例版本,还有待改进。
清单2.2-1 RightTriangleChecker.java 用于判断是否为直角三角形的类
package com.learningjava;import java.util.Arrays;import java.util.Collections;/** * check whether the input values can construct a right trangle * @author wangdq * 2014-3-2 */public class RightTriangleChecker {public static Boolean isRightTrangle(Integer [] edges) {if(edges.length != 3) {return false;} else if(edges[0] <= 0 || edges[1] <= 0 || edges[2] <= 0) {return false;}else if(edges[0]+edges[1] <= edges[2] || edges[0]+edges[2] <= edges[1] || edges[1]+edges[2] <= edges[0]){return false;}else {Collections.sort(Arrays.asList(edges));if(edges[0]*edges[0] + edges[1]*edges[1] != edges[2]*edges[2]) {return false;}else {return true;}}}}
package com.learningjava;import static org.junit.Assert.assertEquals;import java.util.Arrays;import java.util.Collection;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;/** * use more data to test the RightTriangleChecker * @author wangdq */@RunWith(Parameterized.class)public class RightTriangleCheckerTest {private Integer[] edges;private Boolean expectedResult;public RightTriangleCheckerTest(Integer[] edges,Boolean expectedResult) {this.edges = edges;this.expectedResult = expectedResult;}@Parameterized.Parameterspublic static Collection<?> prepareTestData() {return Arrays.asList(new Object[][] {{new Integer[]{-1,6,4}, false },{new Integer[]{5,0,4}, false },{new Integer[]{5}, false },{new Integer[]{2,4}, false },{new Integer[]{2,8,12,5}, false },{new Integer[]{3,4,7}, false },{new Integer[]{3,5,9}, false },{new Integer[]{3,3,3}, false },{new Integer[]{3,4,5}, true }});}// This test will run 9 times since we have 9 parameters defined @Testpublic void testRightTrangleChecker() {System.out.print("input edges are: ");System.out.println(Arrays.asList(edges));assertEquals(expectedResult, RightTriangleChecker.isRightTrangle(edges));}}
清单2.2-2 TestRunner.java 运行测试类的测试用例
package com.learningjava;import org.junit.runner.JUnitCore;import org.junit.runner.Result;import org.junit.runner.notification.Failure;/** * run unit test * @author wangdq */public class TestRunner {public static void main(String[] args) {Result result = JUnitCore.runClasses(RightTriangleCheckerTest.class);for (Failure failure : result.getFailures()) {System.out.println(failure.toString());}System.out.println(result.wasSuccessful());}}
运行结果:
input edges are: [-1, 6, 4]
input edges are: [5, 0, 4]
input edges are: [5]
input edges are: [2, 4]
input edges are: [2, 8, 12, 5]
input edges are: [3, 4, 7]
input edges are: [3, 5, 9]
input edges are: [3, 3, 3]
input edges are: [3, 4, 5]
true
关于maven的更多内容,可参考:http://www.tutorialspoint.com/maven/.
关于Junit的更多内容,可参考: http://www.tutorialspoint.com/junit/ .
- java学习脚印:java工具早使用——Maven与Junit
- java学习脚印:java工具早使用——Maven与Junit
- JUNIT—Java单元测试的简单学习与使用
- java学习脚印:反射与动态代理
- java学习脚印: 反射与注释(Annotation)
- JAVA学习脚印 :日志文件的使用
- JAVA学习脚印 :日志文件的使用
- Java单元测试工具——Junit
- java学习脚印:几种迭代方式
- JAVA学习脚印9:外部类与嵌套类
- java学习脚印:Class类与反射机制
- JAVA学习脚印4: 对象与类的概念
- Java一步一脚印—HashSet
- Java一步一脚印—HashMap
- Maven的安装配置及初次创建项目与java单元测试工具JUnit
- java junit (单元测试)测试工具如何使用?
- JAVA学习脚印 1:开篇——初识java语言及开发环境
- java学习脚印:深入java绘图机制
- _com_util::ConvertBSTRToString如何使用
- C语言小贴士之switch分支语句
- VC++消息钩子编程
- JQuery之DOM操作学习笔记
- Hashtable和HashMap类有三个重要的不同之处。
- java学习脚印:java工具早使用——Maven与Junit
- 软件设计师角色指南-【3】日常工作
- 无间道123
- javascript和jquery动态创建html元素
- C语言实验——最小公倍数和最大公约数
- [C++学习历程]基础部分 C++中的函数学习
- linux makefile学习笔记(4)
- PostgreSQL 数据库维护
- Maximum Depth of Binary Tree