码迷,mamicode.com
首页 > 其他好文 > 详细

第三次作业

时间:2016-09-10 14:29:55      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

 

一、单元测试的流程

1、判断组件的功能:通过定义应用的整体需求,然后将系统划分成几个对象,我们需要对组件的基本功能十分清楚。因此,J2EE单元测试实际上也属于设计过程的一部分。 
2、设计组件行为:依据所处理的过程,可以通过一个正规或者非正规的过程实现组件行为的设计,我们可以使用UML或者其他文档视图来设计组件行为,从而为组件的测试打下基础。 
3、编写单元测试程序(或测试用例)确认组件行为:这个阶段,应该假定组件的编码已经结束而组件工作正常,我们需要编写单元测试程序来确定其功能是否和预定义的功能相同,测试程序需要考虑所有正常和意外的输入,以及特定的方法能产生的溢出。 
4、编写组件并执行测试:首先,创建类及其所对应的方法标识,然后遍历每个测试实例,为其编写相应代码使其顺利通过,然后返回测试。继续这个过程直至所有实例通过。此时,停止编码。 
5、测试替代品:对组件行为的其他方式进行考虑,设计更周全的输入或者其他错误条件,编写测试用例来捕获这些条件,然后修改代码使得测试通过。 
6、重整代码:如果有必要,在编码结束时,对代码进行重整和优化,改动后,返回单元测试并确认测试通过。 
7、当组件有新的行为时,编写新的测试用例:每次在组件中发现故障。编写一个测试实例重复这个故障,然后修改组件以保证测试实例通过。同样,当发现新的需求或已有的需求改变时,编写或修改测试实例以响应此改变,然后修改代码。 
8、代码修改,返回所有的测试:每次代码修改时,返回所有的测试以确保没有打乱代码。  

 

 

二、实际测试步骤

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

第二步,将JUnit4单元测试包引入这个项目:在该项目上点右键,点“属性”,在弹出的属性窗口中,首先在左边选择“Java Build Path”,然后到右上选择“Libraries”标签,之后在最右边点击“Add Library…”按钮,然后在新弹出的对话框中选择JUnit4并点击确定,JUnit4软件包就被包含进这个项目了。

 第三步,生成JUnit测试框架:在Eclipse的Package Explorer中用右键点击该类弹出菜单,选择“New à JUnit Test Case”。在弹出的对话框中,进行相应的选择选择"New JUnit test"---"set up" ,点击“下一步”后,系统会自动列出你这个类中包含的方法,选择要进行测试的方法。此例中,仅对“加、减、乘、除”四个方法进行测试。选中 add(int) substract(int)  multiply(int) divide(int)。之后系统会自动生成一个新类CalculatorTest,里面包含一些空的测试用例。

第四步,运行测试代码:按照上述代码修改完毕后,在CalculatorTest类上点右键,选择“Run As à JUnit Test”来运行测试。

第五步,实验结果共进行了4个测试,其中1个测试被忽略,一个测试失败。

 

(1)第一步的代码如下:

package andycpp;

技术分享
技术分享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;
技术分享    }
技术分享}
技术分享

 

 

(2)完整的CalculatorTest代码如下:

package andycpp;
技术分享
技术分享import static org.junit.Assert.*;
技术分享import org.junit.Before;
技术分享import org.junit.Ignore;
技术分享import org.junit.Test;
技术分享
技术分享public class CalculatorTest {
技术分享
技术分享    private static Calculator calculator = new Calculator();
技术分享    
技术分享    @Before
技术分享    public void setUp() throws Exception {
技术分享        calculator.clear();
技术分享    }
技术分享
技术分享    @Test
技术分享    public void testAdd() {
技术分享        calculator.add(2);
技术分享        calculator.add(3);
技术分享        assertEquals(5, calculator.getResult());
技术分享    }
技术分享
技术分享    @Test
技术分享    public void testSubstract() {
技术分享        calculator.add(10);
技术分享        calculator.substract(2);
技术分享        assertEquals(8, calculator.getResult());
技术分享    }
技术分享
技术分享    @Ignore("Multiply() Not yet implemented")
技术分享    @Test
技术分享    public void testMultiply() {
技术分享    }
技术分享
技术分享    @Test
技术分享    public void testDivide() {
技术分享        calculator.add(8);
技术分享        calculator.divide(2);
技术分享        assertEquals(4, calculator.getResult());
技术分享    }
技术分享}

 

(3)运行结果如下:

技术分享

 

第三次作业

标签:

原文地址:http://www.cnblogs.com/xubingxin/p/5859215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!