单元测试-测试报告.doc

上传人:李医生 文档编号:5712809 上传时间:2020-07-24 格式:DOC 页数:9 大小:428.50KB
返回 下载 相关 举报
单元测试-测试报告.doc_第1页
第1页 / 共9页
单元测试-测试报告.doc_第2页
第2页 / 共9页
单元测试-测试报告.doc_第3页
第3页 / 共9页
单元测试-测试报告.doc_第4页
第4页 / 共9页
单元测试-测试报告.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《单元测试-测试报告.doc》由会员分享,可在线阅读,更多相关《单元测试-测试报告.doc(9页珍藏版)》请在三一文库上搜索。

1、单元测试-测试报告一、准备工作1 打开Visual Studio。2 在“文件”菜单上指向“新建”,然后单击“项目”。此时将出现“新建项目”对话框。3 在“已安装的模板”下单击“Visual C#”。4 在应用程序类型的列表中单击“类库”。5 在“名称”框中键入Bank,然后单击“确定”。说明:如果名称“Bank”已被使用,请为该项目选择其他名称。6 将创建新的Bank项目并将其显示在解决方案资源管理器中,而且将在代码编辑器中打开Class1.cs文件。说明:如果代码编辑器中未打开Class1.cs文件,请在解决方案资源管理器中双击文件Class1.cs将其打开。7 从上面“系统必备”中复制源

2、代码。8 用上面“系统必备”中的代码替换Class1.cs的原始内容。9 在“生成”菜单上,单击“生成解决方案”。现在您有一个名为“Bank”的项目。它包含要测试的源代码和用于对该源代码进行测试的工具。Bank的命名空间“BankAccountNS”包含公共类“BankAccount”,在以下过程中将对该类的方法进行测试。说明:系统必备中源代码为如下:using System;namespace BankAccountNS / /Bank Account demo class./ public class BankAccount private string m_customerName; p

3、rivate double m_balance; private bool m_frozen = false; private BankAccount() public BankAccount(string customerName, double balance) m_customerName = customerName; m_balance = balance; public string CustomerName get return m_customerName; public double Balance get return m_balance; public void Debi

4、t(double amount) if (m_frozen) throw new Exception(Account frozen); if (amount m_balance) throw new ArgumentOutOfRangeException(amount); if (amount 0) throw new ArgumentOutOfRangeException(amount); m_balance += amount; public void Credit(double amount) if (m_frozen) throw new Exception(Account froze

5、n); if (amount 0) throw new ArgumentOutOfRangeException(amount); m_balance += amount; private void FreezeAccount() m_frozen = true; private void UnfreezeAcount() m_frozen = false; public static void Main() BankAccount ba = new BankAccount(Mr.Bryan Walton, 11.99); ba.Credit(5.77); ba.Debit(11.22); Co

6、nsole.WriteLine(Current balance is $0, ba.Balance); 二、创建单元测试10 如果代码编辑器中未打开Class1.cs文件,请在解决方案资源管理器中双击Bank项目中的Class1.cs文件。11 在Class1.cs文件的“BankAccount”类中,滚动到“Debit()”方法。12 右击“Debit()”方法,然后选择“创建单元测试”。将显示“创建单元测试”对话框。在“当前选择”下,树结构将显示保存“BankAccount”类的程序集的类和成员层次结构。使用此页可以为选定的任何成员生成单元测试,并可以选择要在其中放置生成的单元测试的测试项

7、目。在该树结构中,只选择了“Debit()”方法。将其保留选定状态并选择“Credit()”方法。13 对于“输出项目”,请选择“创建新的VisualC#测试项目”。14 单击“设置”。随即出现“测试生成设置”对话框。在“命名设置”下,可以更改测试文件、测试类和测试方法在生成时的命名方式。在“常规”下,可以更改测试生成的其他方面。将这些设置保留为默认值,然后单击“确定”。15 在“创建单元测试”对话框中单击“确定”。随即出现“新建测试项目”对话框。16 接受默认名称,然后单击“创建”。这将创建一个名为TestProject1的项目,该项目将显示在解决方案资源管理器中。一个名为BankAccou

8、ntTest.cs的文件添加到TestProject1中,该文件包含一个测试类。该类中填充有一个TestContext属性以及测试“Debit()”和“Credit()”方法的方法。说明:将自动为每个测试方法分配“TestMethod()”特性。每个测试都与要测试的测试代码中的一个方法相对应。测试方法保存在已分配“TestClass()”特性的测试类中。17 在BankAccountTest.cs中,指定要测试的变量的值。滚动到“DebitTest”方法,在此可以看到/TODO行,它们指示要设置的变量。18 若要了解DebitTest方法将使用哪些值,请打开Class1.cs文件并滚动到“Ma

9、in”方法。请注意,客户名称初始化为“Mr.BryanWalton”,帐户余额初始化为“11.99”,调用“Credit”方法时使用参数“5.77”,调用“Debit”方法时使用参数“11.22”。因此,如果此帐户开始时“Balance”为“11.99”,则在传递“11.22”时调用“Debit”方法应生成新“Balance”值“0.77”。说明:在本演练后面的部分中,您将使用此预期的“Balance”值(0.77)。19 在BankAccountTest.cs文件中,滚动到“DebitTest”方法。20 设置下列值:BankAccounttarget = new BankAccount(M

10、r.Bryan Walton, 11.99);doubleamount = 11.22;21在“CreditTest”方法中,将“Mr.BryanWalton”和11.99添加到新的BankAccount中。22 保存BankAccountTest.cs文件。您已创建了一个源代码文件,其中包含Bank项目的测试。现在可以对Bank项目的代码运行“BankAccountTest”类中的测试了。3、 运行和自定义单元测试23 在“测试”菜单上,单击“窗口”,然后选择“测试视图”。将显示“测试视图”窗口。24 右击“DebitTest”,再单击“运行选定内容”。如果“测试结果”窗口尚未打开,则它现在

11、将打开。“DebitTest”测试运行。在“测试结果”窗口的“结果”列中,当测试运行时,测试状态将显示为“正在运行”。测试运行完成后,测试的结果将更改为“没有结论”。25 在“测试结果”窗口中右击表示测试的行,然后单击“查看测试结果详细信息”。26 在“测试结果详细信息”页中,将显示错误消息“Assert.Inconclusive失败。无法验证不返回值的方法。”若要创建成功的测试,请先查找并评估此“Assert”语句。27 若要查找包含“Assert”语句的测试方法,请打开BankAccountTest.cs文件并滚动到“DebitTest()”方法。28 Assert语句是“DebitTes

12、t”方法中的最后一行。它显示如下内容:Assert.Inconclusive(无法验证不返回值的方法。);注释掉此Assert语句。29 如果现在运行测试,则会得出“已通过”结果,但这仅仅是因为它没有对任何内容进行测试。必须添加对预期的结果进行测试的代码。向“DebitTest”方法的末尾添加以下语句:Assert.AreEqual(System.Convert.ToDouble(0.77),target.Balance,0.05);此语句将预期结果(0.77)与调用“BankAccount”类的“Balance”方法所产生的实际结果进行比较。如果两个值不相等,则“Assert”返回“Fals

13、e”,从而使测试失败。说明:此“Assert”语句还包括第三个参数“delta”,其值为0.05。在“Assert.AreEqual”方法的此重载中需要该delta参数;它可以补偿“Doubles”等浮点型所固有的舍入错误。您已运行了“BankAccountTest”测试类的生成的“DebitTest”方法,注意它需要做的更改,请就此做出这些更改。现在,可以测试您应用程序中“Debit”方法的精确性。4、 运行单元测试并修复代码30 再次运行Debit测试:在文件BankAccountTest.cs中,右击“DebitTest()”方法,然后单击“运行测试”。在“测试结果”窗口的“结果”列中,

14、当测试运行时,测试状态将显示为“正在运行”。测试运行完成后,测试的结果将更改为“未通过”。31 在“测试结果”窗口中右击表示测试的行,然后单击“查看测试结果详细信息”。这将打开“测试结果详细信息”页,其中显示以下错误消息:“Assert.AreEqual失败。预期值和实际值之间的差不应大于”。这些数字似乎表明数学运算不正确。由于“BankAccountTest”类的“DebitTest”方法测试“BankAccount”类的“Debit”方法,所以从检查“Debit”方法开始。32 打开Class1.cs文件并滚动到“Debit”方法。33 请注意以下赋值:m_balance+= amount

15、;此赋值向余额增加金额,在“Debit”方法中,应当减去赋值。将此行更改为:m_balance-= amount;34再次运行“Debit”测试。在“测试结果”窗口的“结果”列中,将为“DebitTest”显示“已通过”。说明:更改源代码后不必重新生成测试项目,因为运行测试时会生成项目而不进行提示。您创建了一个可以运行的单元测试,并通过它查找和修复了代码中的错误。5、 为私有方法创建和运行单元测试35 打开Bank项目中的Class1.cs文件。36 右击“FreezeAccount()”方法,然后选择“创建单元测试”。随即出现“创建单元测试”对话框。在显示的树结构中,只有“FreezeAcc

16、ount()”方法处于选定状态。37 (可选)单击“筛选器”,然后清除“显示非公共项”。注意,“FreezeAccount()”方法已从BankAccount类的子方法列表中移除。再次单击“筛选器”,然后选择“显示非公共项”以重新显示“FreezeAccount()”方法。38 确保“FreezeAccount()”方法处于选中状态,然后单击“确定”。此时将新建一个名为Bank.accessor的专用访问器文件。该文件中包含特殊的访问器方法,测试使用这些方法间接调用BankAccount类中的私有方法。在解决方案资源管理器的“测试引用”文件夹中可以看到这个新文件。39 打开BankAccoun

17、tTest.cs文件并滚动到“FreezeAccountTest()”方法。40 更改“FreezeAccountTest()”方法的代码,使其与下面所示的代码一致。更改过的区域或新区域有相应的指示:public void FreezeAccountTest() BankAccount_Accessor target=new BankAccount_Accessor(Mr.Bryan Walton, 11.99); / TODO: Initialize to an appropriate value target.FreezeAccount(); /Assert.Inconclusive(A

18、method that does not return avalue can not be verified.); bool creditAccount=false; /Falsemeansaccountcould becredited: Fail test. /Try to credit account try target.Credit(1.00); catch (System.Exception) / Threwexception.FreezeAccount worked correctly:Pass test. creditAccount=true; /AssertfailsifcreditAccountcondition is false.Fail test. Assert.IsTrue(creditAccount, Was able to credit account.); 41运行“FreezeAccountTest”测试。在“测试结果”窗口的“结果”列中,最终测试状态显示为“已通过”。该结果与预期结果一致,原因是测试在调用“FreezeAccount()”方法冻结帐户之后调用了“Credit()”方法。您已经添加了一个私有方法,为其创建了新的单元测试并运行了该测试。可以对balance变量使用其他边界值(如15.00)来多次运行该测试。SA12225032朱鹏飞

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1