Junit and Eclemma
课题作业:
1.在eclipse内安装Junit,hamcrest和Eclemma。
2.编写一个判断三角形的程序并使用jUnit编写其测试类:
Description of triangle problem:
Function triangle takes three integers a,b,c which are length of triangle sides; calculates whether the triangle is equilateral, isosceles, or scalene.
编写三角形方法,输入三个代表三角形三边长的整形数a,b,c,计算并判断三边长是否是等边三角形、等腰三角形或斜角三角形。
Java环境以及eclipse已经配置并安装完毕,直接开始安装jUnit/hamcrest/Eclemma。
第一步:
分别从:
http://mvnrepository.com/artifact/org.hamcrest/hamcrest-all/1.3
http://mvnrepository.com/artifact/junit/junit/4.12
https://sourceforge.net/projects/eclemma/
下载hamcrest、jUnit和eclemma。
下载后解压到一个文件夹中,
第二步:在eclipse内引用jUnit与hamcrest的jar包,安装Eclemma
首先启动eclipse
a)引入jar包,步骤如下
右键单击项目,Build Path -> Configure Build Path -> Add External jars
在弹出的窗口里选中junit-4.12,jar和hamcrest-all-1.3.jar,打开文件。引入成功。
b)安装Eclemma
将刚才解压的Eclemma文件夹复制到[eclipse_home]\\dropins
随后操作为help -> install new software -> add -> local -> 选择下载好的eclemma安装,根据提示重启。
接下来编写判断三角形类别的程序:
创建Triangle类,编写三角形对象的基本属性和方法。
创建Func类,编写用于判断三角形是否为等边、等腰或斜角三角形的方法。
创建FuncTest类:
右键Func类,New -> JUnit Test Case,弹出窗口如下图设置,Finish。
生成FuncTest类,之后编写测试程序。
Triangle类代码:
package triangleCal; public class Triangle { private int a, b, c;//三角形的三条边 public Triangle(int la, int lb, int lc){//输入三角形的三条边长 setA(la); setB(lb); setC(lc); } public double getA() { return a; } public void setA(int a) { this.a = a; } public double getB() { return b; } public void setB(int b) { this.b = b; } public double getC() { return c; } public void setC(int c) { this.c = c; } }
Func类代码:
package triangleCal; public class Func { private Triangle t; private int ans = -1; public Func(){ } public void setFunc(int a, int b, int c){//题目要求的函数 t = new Triangle(a, b, c); if(isTriangle()){//能否构成三角形 if(isEquilateral()){//正三角形 ans = 1; System.out.println("正三角形"); } else if(isIsosceles()){//等腰 ans = 2; System.out.println("等腰三角形"); } else{//非等边 ans = 0; System.out.println("非等边三角形"); } }else{//构不成三角形 not a triangle ans = -1; System.out.println("构不成三角形"); } } public int getAns() {//test获取结果 return ans; } public boolean isEquilateral(){//判断等边【单个函数不验证是否能构成三角形 if(t.getA() == t.getB() && t.getA() == t.getC()) return true; return false; } public boolean isIsosceles(){//判断等腰【单个函数不验证是否能构成三角形 if(t.getA() == t.getB() || t.getA() == t.getC() || t.getB() == t.getC()) return true; return false; } public boolean isTriangle(){//判断是否为三角形 if(t.getA() <= 0 || t.getB() <= 0 || t.getC() <= 0)//边长不小于0 return false; if(t.getA() + t.getB() <= t.getC() || Math.abs(t.getA() - t.getB()) >= t.getC() )//两边之和大于第三边,两边之差小于第三边 return false; return true; } }
FuncTest类代码:
package test; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import triangleCal.Func; public class FuncTest { private Func f; @Before public void setUp() throws Exception { f = new Func(); } @Test public void testFunc() { f.setFunc(1, 1, 1); assertEquals(1, f.getAns());//正三角形 f.setFunc(-1, -1, -1); assertEquals(-1, f.getAns());//不是三角形 f.setFunc(-1, 1, 1); assertEquals(-1, f.getAns());//不是三角形 f.setFunc(1, -1, 1); assertEquals(-1, f.getAns());//不是三角形 f.setFunc(1, 1, -1); assertEquals(-1, f.getAns());//不是三角形 f.setFunc(0, 0, 0); assertEquals(-1, f.getAns());//不是三角形 f.setFunc(1, 5, 2); assertEquals(-1, f.getAns());//不是三角形 f.setFunc(1, 5, 4); assertEquals(-1, f.getAns());//不是三角形 f.setFunc(2, 1, 7); assertEquals(-1, f.getAns());//不是三角形 f.setFunc(3, 4, 5); assertEquals(0, f.getAns());//非等边三角形 f.setFunc(4, 4, 6); assertEquals(2, f.getAns());//等腰三角形 } @Test public void testIsEquilateral() { f.setFunc(1, 1, 1); assertEquals(true, f.isEquilateral()); f.setFunc(50, 50, 50); assertEquals(true, f.isEquilateral()); } @Test public void testIsIsosceles() { f.setFunc(1, 1, 1); assertEquals(true, f.isIsosceles()); f.setFunc(2, 1, 1); assertEquals(true, f.isIsosceles()); f.setFunc(1, 2, 1); assertEquals(true, f.isIsosceles()); f.setFunc(3, 4, 5); assertEquals(false, f.isIsosceles()); } @Test public void testIsTriangle() { f.setFunc(-1, 1, 1); assertEquals(false, f.isTriangle()); f.setFunc(1, -1, 1); assertEquals(false, f.isTriangle()); f.setFunc(1, 1, -1); assertEquals(false, f.isTriangle()); f.setFunc(0, 0, 0); assertEquals(false, f.isTriangle()); f.setFunc(-1, -1, -1); assertEquals(false, f.isTriangle()); f.setFunc(2, 3, 5); assertEquals(false, f.isTriangle()); f.setFunc(7, 3, 2); assertEquals(false, f.isTriangle()); f.setFunc(2, 3, 4); assertEquals(true, f.isTriangle()); } }
测试了多种情况,包括一些均为0,均为-1,两边之和等于第三边之类的边界条件。经过一些修改,测试用例均能正常运行。
jUnit测试结果截图:
eclemma覆盖率测试截图: