软测lab1
Software Testing, Lab 1
Hamcrest的安装:
http://mvnrepository.com/artifact/org.hamcrest/hamcrest-all/1.3 从该网址下载hamcrest-all/1.3版本,将其copy进项目下的lib文件夹,单击右键“Build Path”选项,选择Add to Build Path
Junit的安装:
http://mvnrepository.com/artifact/junit/junit/4.12 从该网址下载junit/4.12版本,将其copy进项目下的lib文件夹,单击右键“Build Path”选项,选择Add to Build Path
Eclemma的安装:
进入Eclipse,菜单栏help>>Eclipse Market Place
点击installed,安装后重新启动eclipse,如果成功安装,工具栏上会出现一个新的按钮,如图所示:
方法类一:
package cn.tju.scs;
public class Triangle1 {
public boolean istriangle(int a,int b,int c){
if(a+b>c&&a+c>b&&b+c>a){
return true;
}
else
return false;
}
public String form(int a ,int b, int c){
if(istriangle(a,b,c)){
if(a==b&&b==c){
return "equilateral";
}
else if((a==b)||(a==c)||(b==c)){
return "isosceles";
}
else
return "scalene";
}
else
return "not a triangle";
}
}
测试类一:
package cn.tju.scs;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Before;
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 TestTriangle1 {
private int a;
private int b;
private int c;
private String expected;
private Triangle1 sanjiao;
@Before
public void setup() throws Exception{
sanjiao =new Triangle1();
}
public TestTriangle1(int a, int b, int c, String expected) {
this.a = a;
this.b = b;
this.c = c;
this.expected = expected;
}
@Parameters
public static Collection<Object[]> getData() {
return Arrays.asList(new Object[][] { { 1, 0, 2, "not a triangle" }, { 2, 3, 2, "isosceles" },
{ 5, 5, 5, "equilateral" }, { 2, 3, 4, "scalene" } });
}
@Test
public void testEqual(){
assertEquals(this.expected, sanjiao.form(a, b, c));
}
}
方法类二:
package cn.tju.scs;
public class Triangle1 {
public boolean istriangle(int a,int b,int c){
if(a+b>c&&a+c>b&&b+c>a){
return true;
} //判断所给边是否能构成三角形
else
return false;
}
public int form(int a ,int b, int c){
if(istriangle(a,b,c)){
if(a==b&&b==c){
return 3; //代表等边三角形
}
else if((a==b)||(a==c)||(b==c)){
return 2;//代表等腰三角形
}
else
return 1;//代表斜角三角形
}
else
return 0;//不符合构成三角形的条件
}
}
测试类二:
package cn.tju.scs;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
public class TestTriangle1 {
private Triangle1 sanjiao;
@Before
public void setup() throws Exception{
sanjiao =new Triangle1();
}
@Test
public void testEqual(){
assertEquals(3,sanjiao.form(5,5,5));
//assertEquals(1,sanjiao.form(3,4,5));
//assertEquals(2,sanjiao.form(1,2,2));
//assertEquals(0,sanjiao.form(-1,0,3));
}
}
运行测试用例以及用Eclemma进行覆盖测试:
覆盖测试,效果如图,其中红色代表未执行,黄色代表条件部分执行,绿色代表已执行
将覆盖结果导出HTML报告:
HTML报告可以逐层展开,点击方法还可以看到代码的覆盖情况。
列名含义:
missed Instructions代码覆盖率,
Missed Branches逻辑分支覆盖率,
Missed Cxty判断执行数,
missed Lines代码行数,
Methods方法个数。