7. 错
8. 错
9. 对
10. 错
11. 错
二.填空题
1. 单元测试主要由_______________人员完成。
2. 单元测试的对象是_________________。
3. Junit是____________测试工具。
4. Junit3通过_____________类收集TestCase运行的结果,记录运行的详细情况。
5. Junit3通过______________和______________来建立测试环境和销毁测试环境。
6. Junit4使用元标签______________表示某些方法尚未完成,暂不参与此次测试。
7. Junit4使用元标签______________用于在每个测试方法运行前均初始化一次
8. Junit4使用元标签______________用于每个测试方法运行完毕后执行
9. Junit4使用元标签______________用于在测试类创建时运行一次
10. Junit4使用元标签______________用于在测试类结束时运行一次
解答: 1. 开发人员
2. 类或函数 3. 单元
4. TestResult
5. Setup()、teardown()
6. @Ignore:
7. @Before
8. @After
9. @BeforeClass
10. @AfterClass
三.名词解释 1. 驱动模块
2. 桩模块
3. 单元测试
4. Mock Object
解答:
1. 用以模拟被测模块的上级模块,接受测试数据,将相关数据传给被测模块,并显示结果 。
2. 对顶层或上层模块进行测试时所编写的替代下层模块的程序。
3. 单元测试是对软件基本组成单元进行的测试。
4. 代替与代码协作的对象的对象
四.简答题
1. 假设你开发了一个模块的代码,对该模块测试需要WEB环境,而且该模块调用的另一个模
块由别人正在开发,你该如何测试。
2. 简述单元测试的目标和任务。
3. 构造测试驱动器有哪几种方法,各有什么优缺点。
4. 简述Stub与mock object之间的区别
5. 简述Xunit测试框架具有哪些优点,使得现行的软件单元测试完全基于Xunit框架。
解答:
1. 使用stub stub是旨模拟可能存在或还没写完真实代码所产生的行为,用来替换真正的代码,此时 可以编写桩模块模拟别人正在开发的模块。
stub一般适合代码中粗粒度部分,比如文件系统,连接服务器和数据库等,这里,可以
使用jetty做为WEB服务器,编写桩代码进行测试。
2. 目标:检验程序最小单位有无错误;检验单元编码与设计是否吻合。 任务:模块接口测试、模块局部数据结构测试、模块边界条件测试、模块独立执行通路 测试、模块的各条错误处理通路测试。
3.
4. 使用stub stub是旨模拟可能存在或还没写完真实代码所产生的行为,用来替换真正的代码。
stub一般适合代码中粗粒度部分,比如文件系统,连接服务器和数据库等 stub通常难以编写,尤其是仿真系统很复杂的时候 使用Mock object------------是一个对象
用来代替与你的代码协作的对象。这样与stub有些相似,但是仅限于此。 mock object一般适合代码中细粒度部分
5. 可以使测试代码与产品代码分开。
针对某一个类的测试代码通过较少的改动便可以应用于另一个类的测试。 易于集成到测试人员的构建过程中,XUnit和Ant的结合可以实施增量开发。 XUnit是公开源代码的,可以进行二次开发。 可以方便地对XUnit进行扩展。
五.应用题
1. 现有人编写了类Math,其中有一个求根号静态操作sqrt(x),如果数值正确,输出开根号 的值,如果数据不正确,抛出异常Exception,请用弱健壮等价类法设计测试用例,并写出基
于Junit的测试代码。
2. 现有人编写了计算器类Caculator,其中有一个除法操作divide (x,y),表示x/y,如果 数值正确,输出相应的值,如果数据不正确,抛出异常Exception,请用错误推测法至少设计
3个测试用例,并写出基于Junit的测试代码。
3. 现有人编写了帐号类Account,用于管理个人的存款余额,
public Account{
private double balance; //帐号余额,余额最低为0 public double getBalance(){ return balance; }
Public void setBalance(double b){ balance=b;
}
public void deposit(double money) throws Exception { //存款,money如果为负数,抛出异常 } }
请用错误推测法为deposit()函数至少设计3个测试用例,并写出基于Junit的测试代码。
4. 现有人编写了帐号类Account,用于管理个人的存款余额, public Account{ private double balance; //帐号余额,余额最低为0 public double getBalance(){
return balance; }
Public void setBalance(double b){ balance=b; }
public double withdrawl(double money) throws Exception { //取款,money如果为负数或余额不足,抛出异常 } }
请用错误推测法为withdrawl()函数至少设计3个测试用例,并写出基于Junit的测试代码 。
5. 某一种8位计算机,其十六进制常数的定义是以0x或0X开头的十六进制整数,其取值范围
为-7f~7f(不区分大小写字母),如0x13、0x6A、-0x3c。
(1)请写出弱一般、强一般、弱健壮等价类测试用例 (2)请写出强健壮等价类的测试用例个数 要求写出分析过程
解答:
1. 变量X,有效等价类:{(x为正整数);(x为正浮点数),(x为0)},无效等价类:{( x为负数)}
public class TestSample extends TestCase{ public void testSqrtInteger(){
float result=Math.Sqrt(4);
Assert.assertEquals ( 2,result); }
public void testSqrtFloat(){
float result=Math.Sqrt(1.44);
Assert.assertEquals ( 1.2,result); }
public void testSqrtZero(){ float result=Math.Sqrt(0); Assert.assertEquals ( 0,result); }
public void testSqrtError(){ try{
float result=Math.Sqrt(-4); fail(“data is error”); }
catch(Exception err){ Assert.assertTrue(true); } } }
2.
public class TestSample extends TestCase{