软件测试—— junit 单元测试
Tasks:
- Install Junit(4.12), Hamcrest(1.3) with Eclipse
- Install Eclemma with Eclipse
- Write a java program for the triangle problem and test the program with Junit.
a) 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.
EclEmma安装
1. 选择Help->Eclipse Marketplace->搜索EclEmma,Install;
2. 重启eclipse发现工具栏上出现Coverage图标,说明安装成功;
EclEmma使用
1. 新建一个项目,然后添加一个类,然后简单书写一些代码;
2. 右键项目->选择Coverage As->Java Application,可以得到如下结果:
3. 从运行结果可以看到,有多种颜色,其中
绿色表示代码被执行到
黄色表示代码部分执行到
红色表示代码没有被执行到
3.2 EclEmma检测覆盖率
1. 选择Window->Show View->Other->Java->Coverage可以看到代码执行的覆盖率;
2. 其中可以看到每一个类中代码被执行的百分比,见2,也可以看到整个项目代码被执行的百分比,见1;
3. 其中检测覆盖率可以用到单元测试中,查看单元测试覆盖率。
实验demo
主类:
package text2; public class triangle { public static int text1(int a,int b, int c) { int array[]; array= new int[3]; array[0]= a; array[1]= b ; array[2]= c; int temp; for(int i = 0 ; i < 3 ; i++) { for(int j = 0 ; j < 2 ; j++) { if(array[j]>array[j+1]) { temp = array[j+1]; array[j+1] = array[j]; array[j] = temp; } } } if(array[0]+array[1]>array[2]) { if(array[0]==array[1] && array[0]==array[2]) return 3; if(array[0]==array[1]||array[1]==array[2]) return 2; if(array[0]*array[0]+array[1]*array[1]==array[2]*array[2]) return 4; return 1; } return 0; } }
1代表三角形,0代表不构成3角形,2代表等腰三角形,3代表等边三角形,4代表直角三角形
------------在写博客的时候意识到没有判断是否是等腰直角三角形,如果是则先被判断为了等腰三角形。
测试类:
package text2; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collection; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class ParameterTest { int expected = 0; int input1 = 0 ; int input2 = 0; int input3 = 0; @Parameters public static Collection<Object[] > t(){ return Arrays.asList(new Object[][]{ {0,3,1,2}, {0,4,2,2}, {2,2,2,1}, {3,1,1,1}, {4,3,4,5}, {1,6,8,7} }); } public ParameterTest(int expected,int input1,int input2,int input3){ this.expected = expected; this.input1 = input1; this.input2 = input2; this.input3 = input3; } @Test public void test1(){ assertEquals(expected, triangle.text1(input1,input2,input3)); } }
测试结果: