网站大量收购闲置独家精品文档,联系QQ:2885784924

代码覆盖从简到繁(三)划分Block.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
代码覆盖从简到繁 (三) 划分Block   上一篇博客 《代码覆盖从简到繁 (二) – Block Coverage》介绍了Visual Studio所采用的Block覆盖中Block是如何定义的,并且展示了代码行与Block之间其实并不是严格对应的。本篇博客将通过.NET中间语言(IL)进一步分析Visual Studio是如何划分Block的,从而更准确回答代码行与Block不能严格对应的原因。 使用Visual Studio获取code coverage数据是非常简单的,只需要在配置中选择“Code Coverage”选项,然后直接执行测试用例就可以了就可以了,测试执行完毕后,覆盖数据会直接显现在Code Coverage Results”窗口中呈现出来,这些在《代码覆盖从简到繁 (一) 》中都有介绍。其实要获取覆盖数据,首先要对被测试的.exe或者.dll进行instrument,所谓instrument实际上就是向文件注入特定的用于收集覆盖数据的代码;然后,启动覆盖数据的监听服务,刚才注入代码会在被指定到时项监听程序发出报告;接下来就是要执行你的测试用例(可以是自动或者手动测试用例);停止监听服务,生成代码覆盖报告。为了易于使用,Visual Studio自动为我们上述很多工作。除了Visual Studio IDE, 通过命令行工具 VsInstr.exe,VsPerfmon和VsPerfCmd来完成获取覆盖数据的操作,Code Coverage Basics with Visual Studio Team System有详细的介绍,这里就不再赘述!这里需要注意:这些命令不只是用于代码覆盖,而是性能Profiling的 工具。   这里我们用到了VsInstr.exe -coverage命令,用它来instrument我们前面编写的代码,然后通过.NET的Ildasm.exe在IL层观察一下上一篇博客中使用的GetInteger()函数是如何被划分block的,下面就是Instrument之后的GetInteger()函数的IL代码(这里使用的Visual Studio 2010带的C#编译器,编译器不同产生的代码也会不同): .method public hidebysig instance int32 GetInteger(int32 arg1, int32 arg2) cil managed { // Code size 204 (0xcc) .maxstack 3 .locals init ([0] int32 CS$1$0000, [1] bool CS$4$0001) IL_0000: call void Microsoft.VisualStudio.Coverage.Init_bbf9568946f2545aaa9b589093700f85::Register() IL_0005: ldsfld uint64[] Microsoft.VisualStudio.Coverage.Init_bbf9568946f2545aaa9b589093700f85::m_vscov IL_000a: ldc.i4 0x5 IL_000f: ldelem.i8 IL_0010: ldc.i8 0x1 IL_0019: add IL_001a: conv.i IL_001b: ldc.i4.1 IL_001c: stind.i1 IL_001d: nop 判断 arg1 0 IL_001e: ldarg.1 IL_001f: ldc.i4.0 IL_0020: ble.s IL_0043 如果 arg1 = 0,跳转到0043处。 IL_0022: ldsfld uint64[] Microsoft.VisualStudio.Coverage.Init_bbf9568946f2545aaa9b589093700f85::m_vscov IL_0027: ldc.i4 0x5 IL_002c: ldelem.i8 IL_002d: ldc.i8 0x2 IL_0036: add IL_0037: conv.i IL_0038: ldc.i4.1 IL_0039: stind.i1 IL_003a: ldarg.2 判断 arg2 0 IL_003b:

文档评论(0)

dashewan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档