软件测试上机-lab1

Posted hotarufuni

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件测试上机-lab1相关的知识,希望对你有一定的参考价值。

Junit and Eclemma

 

课题作业:

1.eclipse内安装JunithamcrestEclemma

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.

编写三角形方法,输入三个代表三角形三边长的整形数abc,计算并判断三边长是否是等边三角形、等腰三角形或斜角三角形。

 

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/

下载hamcrestjUniteclemma

下载后解压到一个文件夹中,

技术分享图片

 

第二步:在eclipse内引用jUnithamcrestjar包,安装Eclemma

 

首先启动eclipse

 

a引入jar包,步骤如下

技术分享图片

 

技术分享图片

 

右键单击项目,Build Path -> Configure Build Path -> Add External jars

在弹出的窗口里选中junit-4.12,jarhamcrest-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覆盖率测试截图:

技术分享图片

 


以上是关于软件测试上机-lab1的主要内容,如果未能解决你的问题,请参考以下文章

MIT6.824-lab1-2022篇(万字推导思路及代码构建)

Lab_1:练习2——使用qemu执行并调试lab1中的软件

ucore lab1实验笔记

软件测试lab1

软件测试 Lab1

软件测试Lab1