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的安装和初步入门教程可参见官方文档:  http://maven.apache.org/guides/getting-started/index.html 。

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;}}}}

清单2.2-2 RightTriangleCheckerTest.java  测试RightTriangleChecker类

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/ .



0 0
原创粉丝点击