• 软件测试实验三



     实验项目名称:实验三          

    一、     实验目的

    1、掌握单元测试的基本理论和作用。

    2、掌握典型单元测试工具 JUnit 的使用。

    二、  实验内容

    实验任务 1

    按说明完成一个基本的 JUnit4 测试实例。

    实验任务 2

    根据说明,建立一个基于 JUnit4 的测试项目,对一个类当中的多个方法进行单元测试,进一步体验一下单元测试的作用和 JUnit 测试的应用。

    实验任务3

    编写程序判断闰年,设计测试⽤例并⽤Junit进⾏测试。

    实验任务4

    编写程序判断一般三角形,等腰三角形,等边三角形,设计测试用例并用JUnit进行测 试。

    三、  设计思路及结果

    实验任务 1

    请按以下说明完成一个基本的 JUnit4 测试实例。

    首先打开 Eclipse 编译器,创建一个 Java 项目,并在其中创建一个由 File 类构成的程序 File.java,给该类添加一个 abs 方法,作用是返回一个给定整数参数的绝对值。

    package junit_test;

    public class File {

           public int abs(int a) {

                  if(a>0) {

                         return a;

                  }else {

                         return -a;

                  }

           }

    }

    然后用JUnit工具对abs方法进行测试。

     

    实验任务 2

    根据下面的说明,建立一个基于 JUnit4 的测试项目,对一个类当中的多个方法进行单元测试,进一步体验一下单元测试的作用和 JUnit 测试的应用。

    首先新建一个项目叫 JUnitTest,我们编写一个 Calculator 类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。这个类并不是很完美,我们故意保留了一些 Bug 用于演示,这些 Bug 在注释中都有说明。该类代码如下:

    public class Calculator{

    private static int result; // 静态变量,用于存储运行结果

    public void add(int n) {

    result = result + n;

    }

    public void substract(int n) {

    result = result - 1; //故意的Bug,应该是 result =result-n

    }

    public void multiply(int n) {

    } // 假设此方法在项目完成过程中尚未写好

    public void divide(int n) {

    result = result / n;

    }

    public void square(int n) {

    result = n * n;

    }

    public void squareRoot(int n) { //求平方根

    for (; ;) ; //Bug : 死循环

    }

    public void clear() { // 将结果清零

    result = 0;

    }

    public int getResult(){

    return result;

    }

    }

    将 JUnit4 单元测试包引入这个项目,生成 JUnit 测试框架,进行测试。

    package junit_test;

    import static org.junit.Assert.*;

    import java.util.Arrays;

    import java.util.Collection;

    import org.junit.After;

    import org.junit.Before;

    import org.junit.Ignore;

    import org.junit.Test;

    import org.junit.runner.RunWith;

    import org.junit.runners.Parameterized;

    import org.junit.runners.Parameterized.Parameters;

    import junit.framework.TestCase;

    @RunWith(Parameterized.class)

    public class CalculatorTest {

           private static Calculator calculator = new Calculator();

           private int param;

           private int result;

           @Before

           public void setUp() throws Exception {

           }

           @After

           public void tearDown() throws Exception {

           }

           @Test

           public void testClear() {

                  result = 0;

                  calculator.clear();

                  assertEquals(result, calculator.getResult());

           }

          

           @Test

           public void testAdd() {

                  result = 3;

                  calculator.add(3);

                  assertEquals(result, calculator.getResult());

           }

           //故意的Bug,应该是 result =result-n

           @Test

           public void testSubstract() {

                  result = 1;

                  calculator.substract(2);

                  assertEquals(result, calculator.getResult());

           }

          

           @Ignore("此方法未实现")

           public void testMultiply() {

                  calculator.multiply(0);

           }

           @Test(expected = ArithmeticException.class)

           public void testDivide() {

                  calculator.divide(0);

           }

          

           @Parameters

           public static Collection data(){

                  Object[][] objs=new Object[][]{{-2,4},{0,0},{2,4}};

                  return Arrays.asList(objs);

                 

           }

          

           public CalculatorTest(int input,int result){

                  this.param=input;

                  this.result=result;

           }

           @Test

           public void testSquare() {

                  calculator.square(param);

                  assertEquals(result, calculator.getResult());

           }

           //Bug : 死循环

           @Test(timeout = 1000)

           public void testSquareRoot() {

                  calculator.squareRoot(4);

                  assertEquals(2, calculator.getResult());

           }

           @Test

           public void testGetResult() {

                  calculator.clear();

                  result = 3;

                  calculator.add(3);

                  assertEquals(result, calculator.getResult());

           }

    }

     

    实验任务3

    编写程序判断闰年,设计测试⽤例并⽤Junit进⾏测试。

    源程序

    package junit_test;

    public class year {

           public String panduan(int year){

                  String result = " ";

                  if(year%400==0||year%100!=0&&year%4==0){

                         result="闰年";

                  }else{

                         result="平年";

                  }

                  return result;

           }

    }

    测试程序

    package junit_test;

    import static org.junit.Assert.*;

    import org.junit.After;

    import org.junit.Before;

    import org.junit.Test;

    import junit.framework.TestCase;

    public class yearTest {

           @Before

           public void setUp() throws Exception {

           }

           @After

           public void tearDown() throws Exception {

           }

           @Test

           public void testPanduan() {

                  year y=new year();

                  TestCase.assertEquals(y.panduan(2000), "闰年");

                  TestCase.assertEquals(y.panduan(1), "平年");

                  TestCase.assertEquals(y.panduan(100), "平年");

                  TestCase.assertEquals(y.panduan(2004), "闰年");

           }

    }

    实验截图

     

    实验任务4

    编写程序判断一般三角形,等腰三角形,等边三角形,设计测试用例并用JUnit进行测试。

    源程序

    package junit_test;

    public class triangle {

           public String panduan(int a,int b,int c){

                  String result=" ";

                  if(a+b>c&&a+c>b&&b+c>a){

                         if(a==b&&b==c){

                                result="等边三角形";

                         }else if(a==b||b==c||a==c){

                                result="等腰三角形";

                         }else{

                                result="一般三角形";

                         }

                  }else{

                         result="不是三角形";

                  }

                  System.out.print(result);

                  return result;

           }

    }

    测试程序

    package junit_test;

    import static org.junit.Assert.*;

    import org.junit.After;

    import org.junit.Before;

    import org.junit.Test;

    import junit.framework.TestCase;

    public class triangleTest {

           @Before

           public void setUp() throws Exception {

           }

           @After

           public void tearDown() throws Exception {

           }

           @Test

           public void testPanduan() {

                  triangle t=new triangle();

                  TestCase.assertEquals(t.panduan(1,2,3), "不是三角形");

                  TestCase.assertEquals(t.panduan(2,2,3), "等腰三角形");

                  TestCase.assertEquals(t.panduan(3,3,3), "等边三角形");

                  TestCase.assertEquals(t.panduan(4,2,3), "一般三角形");

           }

    }

    运行截图

     

     

    四、  个人体会

    本次学会并练习了Junit测试方法,操作起来比较简单,在后面自己编写源程序有BUG,用测试代码也检测出来了。

  • 相关阅读:
    LeetCode Ugly Number
    LeetCode Missing Number
    拓扑排序
    不相交集的求并算法(按集合大小求并+按高度求并)
    数据结构排序总结
    基数排序
    java 发展简史
    java 白皮书的关键术语
    包+类导入+静态导入+类放入包中+包作用域
    关于二叉堆(优先队列)的其他操作及其应用
  • 原文地址:https://www.cnblogs.com/linmob/p/16163820.html
Copyright © 2020-2023  润新知