当前位置: 首页 > news >正文

软件测试上机-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覆盖率测试截图:

 

转载于:https://www.cnblogs.com/hotarufuni/p/8647517.html

相关文章:

  • 安防摄像头有这么多种类,如何正确选择?
  • 对REST架构风格的理解
  • commander.js基本用法
  • requestAnimationFrame 使用
  • Flutter实战之自定义日志打印组件
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • 36.Azure制作自定义的Windows虚拟机映像
  • apollo客户端springboot实战(四)
  • python 全栈开发,Day4
  • 概率生成函数学习笔记
  • Qt托盘程序
  • LayaAir疑难杂症之一:List渲染无法生效
  • Spring aop详解
  • 解决Linux下普通用户无法使用root连接MySQL服务
  • BZOJ4514: [Sdoi2016]数字配对(费用流)
  • $translatePartialLoader加载失败及解决方式
  • Apache Spark Streaming 使用实例
  • Codepen 每日精选(2018-3-25)
  • exports和module.exports
  • Java Agent 学习笔记
  • Java 多线程编程之:notify 和 wait 用法
  • js作用域和this的理解
  • KMP算法及优化
  • leetcode98. Validate Binary Search Tree
  • magento 货币换算
  • python学习笔记-类对象的信息
  • 安装python包到指定虚拟环境
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 模型微调
  • 排序算法之--选择排序
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 自制字幕遮挡器
  • C# - 为值类型重定义相等性
  • Nginx实现动静分离
  • 回归生活:清理微信公众号
  • 进程与线程(三)——进程/线程间通信
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (07)Hive——窗口函数详解
  • (30)数组元素和与数字和的绝对差
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)hibernate配置管理
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (四)Linux Shell编程——输入输出重定向
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)jQuery 基础
  • (转)用.Net的File控件上传文件的解决方案
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 反射的使用
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...