阅读下列说明,回答问题1至问题5,将解答写在答题纸的对应栏内。【说明】 图4.1是银行卡应用的部分类图,图中属性和操作前的“+”和“-”分别表示公有成员和私有成员。银行卡Account有两种类型,借记卡SavingAccount和信用卡CreditAccount。
问答题 面向对象单元测试的主要对象是什么?
【正确答案】正确答案:类和类方法
【答案解析】解析:该问题考核基本概念,面向对象测试的对象为类和类中的方法。
问答题 在继承关系上,若某方法在测试父类时已经测试过,那么在什么情况下在子类中也需要测试?
【正确答案】正确答案:(1)继承的方法在子类中进行了修改 (2)继承的方法调用了修改过的方法
【答案解析】解析:该问题考核基本概念,若子类的某方法继承了其基类,方法进行了修改,则需要进行测试;另一种情况是,继承的方法没有修改,用基类的方法,但是该方法调用了子类修改过的其他方法时,也需要对该方法进行测试。
问答题 要测试方法deposit()时,还需要调用什么方法?给出测试序列。
【正确答案】正确答案:需要调用的方法:getBalance() 测试序列:getBalance();depositq();getBalance();
【答案解析】解析:在测试方法deposit()时,由于其属性balance发生了变化,因此在测试方法deposit()前后,调用方法getBalance()。
问答题 方法withdraw在基类Account中定义,但在两个子类中有不同的实现。这是面向对象的什么机制?这种情况在测试时如何进行?
【正确答案】正确答案:面向对象机制:多态 如何测试:在两个子类中均要测试withdraw方法
【答案解析】解析:在面向对象技术中,不同的对象收到统一消息可以产生完全不同的结果,这一现象叫做多态。多态可以利用类继承的层次关系来支持。本题干“方法withdraw在基类Account中定义,但在两个子类中有不同的实现。”就是一个典型的多态机制。 在这种情况下,需要对两个子类的方法withdraw()分别测试。
问答题 给出类SavingAccount的最小测试序列。
【正确答案】正确答案:setUp();getBalance();deposit();getBalance();withdraw();getBalance();close();
【答案解析】解析:子类SavingAccount有五个方法,可以完成开户、存款、取款、查询余额和销户功能。因此,测试过程中应该包含这些功能。可以根据上述功能序列来设计测试序列,即setUp();getBalance();deposit();getBalance();withdraw();getBalance();close();。