如何在测试Silverlight时获得代码覆盖率

时间:2009-09-05 17:59:11

标签: silverlight

我正在寻找适用于silverligt的代码覆盖解决方案。它还必须与msbuild一起使用,因为我们在构建服务器中自动运行所有其他单元测试。

与Visual Studio和/或resharper的集成是一个优点,我没有任何反对简单的设置或指向教程的指针。我通常不会修改构建文件,遗憾的是我现在没有时间学习msbuild。

6 个答案:

答案 0 :(得分:6)

不幸的是,由于Silverlight运行时中透明的安全模型(即所有应用程序沙箱),这不是一件容易的事。传统的.NET代码覆盖率检测修改了底层程序集,将P / Invoke调用插入到coverage集合工具中。

因此,像Visual Studio 2008代码覆盖率检测工具这样的工具不适用于Silverlight。

要在Silverlight中实现此目的,您需要设计自定义检测程序以及收集和报告该数据的方法。

在Silverlight团队中,我们开发了一个部分解决方案,可以为某些人启用此功能,但尚未准备好发布。有一天可能会在Silverlight Toolkit中查找它。

很抱歉,我今天不知道你的答案。

答案 1 :(得分:2)

按照以下步骤获取代码覆盖率结果;

- 为解决方案添加新的测试项目
- 删除所有现有的类(数据库测试,有序测试等..),这样你只剩下单元测试类(UnitTest1)。
- 从测试类中删除所有无用的注释和crud代码,这样你只剩下一个测试方法(没有注释,甚至没有TestContext)
- 在测试项目中添加对“System.dll”,“System.Windows.dll”的silverlight版本的引用。 (通常位于“C:\ Program Files \ Microsoft SDKs \ Silverlight \ v2.0 \ Reference Assemblies \”下(如果需要,请删除对system.dll的现有引用)
- 添加对被测项目的引用
- 您现在可以针对对象模型编写测试(标准类)

干杯,

参考:http://weblogs.asp.net/rosherove/archive/2008/12/27/unit-testing-in-silverlight-land-with-typemock-isolator.aspx

答案 2 :(得分:1)

此时的答案是否定(如果杰夫威尔科克斯说不,那就不是;-))。

前一段时间我问过NCover支持这个问题(about their FAQ re Silverlight):

  

...我使用的是Silverlight 2.0和AFAIK,它只能在浏览器中运行。所以你在谈论SL3还是我错过了什么?

     

我相信SL3很快就会成为RTMed。如果我升级,我的应用程序是否能够自动运行浏览器(因此使用NCover),或者我是否必须更改它才能执行此操作?

这是我得到的回应:

  

常见问题解答准确无误,但措辞使其有些混乱。 FAQ主题的含义是NCover在使用// iis参数时不支持覆盖Silverlight代码(v1或v2或v3),因为它在自己的CLR上运行。

     

但是,Silverlight(v1或v2或v3)应用程序的代码隐藏和支持类是有效的C#/ VB,因此您可以针对应用程序的该部分编写单元测试并使用NUnit / MSTest /运行这些测试Gallio / xUnit / etc,您将获得该部分的报道。

     

我们还没有调查过,当它在浏览器外部运行时,NCover是否可以收集Silverlight v3的覆盖范围,但我希望我们无法做到。但是,一旦我们确切知道,我们将在文档中记下它。

我认为这意味着实际上不支持Silverlight应用程序 - 您必须“创建标准.NET库并将文件链接到其中以获取覆盖数据”。

答案 3 :(得分:1)

为了澄清以前的帖子,NCover只能涵盖任何.NET进程。它还没有处理Silverlight CLR。在上面提到的案例中,一位用户询问了一个.NET测试框架,该框架触发了针对他的Silverlight应用程序运行的.NET测试。在这种情况下,将涵盖任何.NET(例如,测试框架)。 Silverlight代码不会被涵盖。

答案 4 :(得分:0)

根据NCover FAQ,它可以涵盖silverlight:

[http://docs.ncover.com/ref/3-0/frequently-asked-questions/#q05][1]

到目前为止,我还没有找到任何信息是否真的有效,例如对于silverlight类库。奇怪的是,如果ncover有效,则没有关于它的信息(博客文章等)。在测试Silverlight代码时,是否所有人都使用“创建标准.NET库并将文件链接到其中以获取覆盖数据”路径?

当谈到其他解决方案(甚至商业化)时,我的谷歌搜索没有产生任何结果。

答案 5 :(得分:0)

我从NCover支持部门询问了这个问题。

我的问题是:

  

让我们说我创建了一个silverlight类   库(项目 - >新项目...)   来自Visual Studio。在这堂课上   图书馆我和几个班级   使用NUnit silverlight模板   包含单元测试的项目   我的silverlight类库:

     

http://weblogs.asp.net/nunitaddin/archive/2008/05/01/silverlight-nunit-projects.aspx

     

我能够很好地运行单元测试   (即使在构建服务器中,我们也是   使用msbuild和TFS)但我不能   使用获取代码覆盖率数据   标准代码覆盖率选项   在Visual Studio中可用。

     

NCover可以显示代码覆盖率   我的silverlight类库?

我得到了回应:

  

只要您使用NUnit测试类库,您就应该能够覆盖   他们使用NCover。如果您使用Selenium等工具通过Web浏览器测试它们,   那么你将无法获得报道。

现在我想知道Silverlight团队中是否有人试图使用NCover + NUnit?当然,MS有自己的单元测试框架,所以在“商业意义上”它看起来不太好:)但是如何才能测试它是否有效。