第三次作业

 

1:查阅单元测试相关资料

2:自学单元测试方法

3:为某个代码添加单元测试
4:写出详细单元测试步骤,测试数据,并截图测试结果,上传至

  个人微博。

 

 

1:查阅单元测试相关资料
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,你可能把一个很大的值放入一个有序list 中去,然后确认该值出现在list 的尾部。或者,你可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。
2:自学单元测试方法
测试
该工具可以对任何类、接口、结构等实体中的字段、属性、构造函数、方法等进行单元测试。创建单元测试大致可以分为两类:
  整体测试,整体测试是在类名称上右击鼠标,在下拉菜单中点击创建单元测试选项。这样就可以为整个类创建单元测试了,这时他会为整个类可以被测试的内容全部添加测试方法。开发人员直接在这些自动生成的测试方法中添加单元测试代码就可以了。
  单独测试,如果只想单独对某个方法、属性、字段进行测试,则可以将鼠标焦点放在这个待测试的项目名称之上,然后点击鼠标右键,在右键菜单中选择创建单元测试选项。这样就可以单独为某个方法创建单元测试了。
2.2  编写单元测试代码
创建完单元测试之后,就可以为单元测试编写测试代码了。具体的测试代码的编写标准会在第三章中介绍。
2.3  运行单元测试
单元测试代码编写完毕,就可以通过运行单元测试来进行测试了。需要运行单元测试的时候,需要打开测试管理器窗口。该窗口可以通过菜单中的“测试”-“窗口”——“测试管理器”来打开。打开该窗口之后,就可以在该窗口中看到我们所建立的单元测试的列表。我们可以在列表中勾选某个单元测试前面的复选框。然后右击鼠标在右键菜单中点击“调试选中的测试”或者“运行选中的测试”。
调试选中的测试的时候,我们可以在测试代码中或者我们自己的代码中添加断点并逐步运行以看其状态。
运行选中的测试只会运行测试并不能够进行测试,这时代码的运行是模拟真实软件运行的时候的情况执行的。我们可以根据我们的实际情况来选中执行哪种测试。
2.4  测试结果
运行了测试之后,我们需要查看这次测试的结果。我们可以通过点击菜单中的“测试”——“窗口”——“测试结果”来打开一个测试结果窗口。每次测试都会在测试结果中向我们显示一些记录。我们也可以通过双击这个测试结果,来查看详细的结果信息。
2.5  代码覆盖率
单元测试写的是否合理或者是否达到了要求的一个唯一的标准就是整个测试的代码覆盖率。代码覆盖率其实就是测试代码所运行到的实际程序路径的覆盖率。在实际程序中可能会有很多的循环、判断等分支路径。一个好的单元测试应该能够将所有可能的路径都将走到,这样就可以保证大多数情况都测试过了。
VS2005中也提供了查看代码覆盖率的工具。我们可以通过点击菜单中的“测试”——“窗口”——“代码覆盖率结果”来打开代码覆盖率查看的窗口。
若要进行代码覆盖率的检查,我们必须进行设置,因为系统默认情况下是不进行代码覆盖率检测的。若要打开某个测试的代码覆盖率测试,我们必须点击菜单中的“测试”——“编辑测试运行配置”——“本地测试运行。。。。。。”来打开一个测试配置窗口。在该窗口左侧的列表中选中“代码覆盖率”就会显示代码覆盖率的设置。在这个配置中会显示当前解决方案中可以用来检测代码覆盖率的程序集,我们将需要进行覆盖率检测的程序集选中然后点击“应用”按钮就可以了。
设置完毕之后,我们就可以直接运行单元测试,测试通过后。我们就可以打开代码覆盖率结果窗口,在这里我们就能够看到这些测试覆盖了多少代码。当我们在这里双击某个类的时候,就可以看到VS已经将代码背景改变了颜色。显示为深棕色的代码就是没有覆盖到的代码,我们可以通过在单元测试代码中添加代码来想办法覆盖这些代码。这样一个单元测试的全过程就完成了。
3:为某个代码添加单元测试
4:写出详细单元测试步骤,测试数据,并截图测试结果,上传至个人微博。

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

package andycpp;

 

publicclass Calculator {

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

    publicvoid add(int n)

    {

        result=result+n;

    }

    

    publicvoid substract(int n)

    {

        result=result-1;        //Bug:正确的应该是result=result-n;  

    }

    

    publicvoid multiply(int n)

    {

        //此方法尚未写好  

    }

    

    publicvoid divide(int n)

    {

        result=result/n;

    }

    

    publicvoid square(int n)

    {

        result=n*n;

    }

    

    publicvoid squareRoot(int n)

    {

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

    }

    

    publicvoid clear()

    {

        result=0;  //将结果清零    

    }

    

    publicint getResult()

    {

        return result;

    }

}

第二步,将JUnit4单元测试包引入这个项目:在该项目上点右键,点“属性”,如图:

在弹出的属性窗口中,首先在左边选择“Java Build Path”,然后到右上选择“Libraries”标签,之后在最右边点击“Add Library…”按钮,如下图所示

然后在新弹出的对话框中选择JUnit4并点击确定,如上图所示,JUnit4软件包就被包含们个项目了。

第三步,生成JUnit测试框架:在Eclipse的Package Explorer中用右键点击该类弹出菜单,选择“New - JUnit Test Case”。如下图所示:

在弹出的对话框中,进行相应的选择,如下图所示:

点击“下一步”后,系统会自动列出你这个类中包含的方法,选择你要进行测试的方法。此例中,我们仅对“加、减、乘、除”四个方法进行测试。如下图所示:

之后系统会自动生成一个新类CalculatorTest,里面包含一些空的测试用例。你只需要将这些测试用例稍作修改即可使用。

完整的CalculatorTest代码如下:

package andycpp;

 

importstatic org.junit.Assert.*;

 

import org.junit.After;

import org.junit.Before;

import org.junit.Ignore;

import org.junit.Test;

import org.junit.internal.runners.TestClassRunner;

import org.junit.runner.RunWith;

 

@RunWith(TestClassRunner.class)

publicclass CalculatorTest {

 

    privatestatic Calculator calculator=new Calculator();

 

    

    @Before

    publicvoid setUp() throws Exception {

        calculator.clear();

    }

 

    @After

    publicvoid tearDown() throws Exception {

    }

 

    @Test(timeout=1000)

    publicvoid testAdd() {

        calculator.add(2);

        calculator.add(3);

        assertEquals(5, calculator.getResult());

    }

 

    @Test

    publicvoid testSubstract() {

        calculator.add(10);

        calculator.substract(2);

        assertEquals(8,calculator.getResult());

    }

 

    @Ignore("Multiply() Not yet implemented")  

    @Test

    publicvoid testMultiply() {

        

    }

 

    @Test(expected =ArithmeticException.class)

    publicvoid testDivide() {

        calculator.add(8);

        calculator.divide(0);

        assertEquals(4,calculator.getResult());

    }

}

第四步,运行测试代码:按照上述代码修改完毕后,我们在CalculatorTest类上点右键,选择“Run As - JUnit Test”来运行我们的测试,如下图所示:

运行结果如下:

进度条是红颜色表示发现错误,具体的测试结果在进度条上面有表示“共进行了4个测试,其中1个测试被忽略,一个测试失败”.

至此,我们已经完整体验了在Eclipse中使用JUnit的方法。

posted on 2016-09-10 19:27  李童童  阅读(141)  评论(0编辑  收藏  举报

导航