11

我正在尝试对 Silverlight 3 项目进行单元测试。我在用:

当我编写一个不使用Moq的测试时,它可以正常工作。

当我在测试之外使用 Moq 时,Moq 可以正常工作。(我模拟了一个界面并在按钮处理程序中进行了验证作为证明。)

但是当我运行一个使用 Moq 的单元测试时,我总是得到这个:

System.IO.FileNotFoundException: Could not load file or assembly 'System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system cannot find the file specified.
at Moq.ExpressionExtensions.ToStringFixVisitor..ctor(Expression expression)
at Moq.Interceptor.AddCall(IProxyCall call, SetupKind kind) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Interceptor.cs: line 104
at Moq.Mock.<>c__DisplayClassc`2.<Setup>b__b() in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.cs: line 387
at Moq.PexProtector.Invoke<T>(Func`1 function) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\PexProtector.cs: line 17
at Moq.Mock.Setup<T1,TResult>(Mock mock, Expression`1 expression) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.cs: line 371
at Moq.Mock`1.Setup<TResult>(Expression`1 expression) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.Generic.cs: line 194
at SilverlightMoq.Test1.TestFirst() in Test1.cs: line 23 

如何修复?


我为 SL 3 重建了两个程序集,结果相同。

我能够在 Microsoft Silverlight 单元测试框架上运行测试。

http://code.msdn.microsoft.com/silverlightut/

这是浏览器内测试框架,似乎是单元测试 SL 的标准方法。问题是:

  1. 您必须一次运行所有测试

  2. 它非常缓慢。

    (比在 nunit 测试框架中运行的相同测试慢约 5 倍)

有谁知道任何其他 SL 测试框架或针对该框架运行测试的更好方法?

当我尝试使用 TestDriven.Net 的 vs 插件时,出现错误:

System.IO.FileNotFoundException:无法加载文件或程序集“系统,...

4

5 回答 5

9

感谢 Lee 提供的信息和他提供的链接(http://weblogs.asp.net/nunitaddin/archive/2008/05/01/silverlight-nunit-projects.aspx),我能够获得我的 Silverlight NUnitHudson中运行代码覆盖率的测试!很棒的东西嘿!而且它们还与ReSharper一起运行,所以我觉得我不再因为在 Silverlight中执行TDD而受到惩罚(延迟 20 秒)。

那么,我到底做了什么?

  • 我为 SL3 制作了一个 Silverlight 单元测试框架项目:

    http://www.jeff.wilcox.name/2010/05/sl3-utf-bits/

  • 然后我将所有测试项目的 Silverlight 程序集的引用(“mscorlib”除外)更改为“复制本地:真”,详见:

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

  • 然后我添加了对以下博客中提供的 Silverlight NUnit 2.5.1 框架的引用(我在下面提到的博客中 Jeff Willcox 和上面他的博客中的 Jamie Cansdale 提供了其他版本,但这是我找到的最新版本):

    http://wesmcclure.tumblr.com/post/152727000

  • 而已!之后,我可以编写我的测试,在 ReSharper 和 NUnit 测试运行器中运行它们!另外,我可以使用 ncover 来获取覆盖率报告!!!

  • 编辑:哦,是的,如果您运行任何需要 UI 线程的测试,您将在 ReSharper 中遇到跨线程错误。这可以通过在Deployment.Current.Dispatcher.BeginInvoke(...)调用中执行这些测试来解决。

  • 在为我的测试使用单元后,我无法从 SL 测试框架 Web 界面运行它们,但这对我来说不是什么大问题。如果您确实需要使其正常工作,请查看:

    http://www.jeff.wilcox.name/2009/01/nunit-and-silverlight/

  • PS:我还为 NUnit 控制台运行程序创建了一个 NUnit 项目,以便从 NUnit 控制台运行我的测试(不要尝试在同一个 NUnit 项目中包含您的非 SL 测试程序集,它不会工作,因为它使用不同的 nunit。框架库)。

我还尝试了 StatLight ( http://statlight.codeplex.com/ ) 从控制台运行测试,这对我来说效果很好,但我是 ReSharper 和 NUnit 的粉丝,所以这对我来说不是最好的选择. StatLight 还有一个奇怪的错误,它没有正确加载我的测试项目资源,导致一些测试失败。

我希望这对某人有所帮助。我在这里没有想出任何新东西,只是整合了我希望有人预先为我总结的所有信息。当我有时间时,我将在博客中介绍如何使用 SilverLight创建一个 Habanero 框架 ( http://www.habanerolabs.com ) 项目。

唷。这就是所有的人!

于 2010-07-22T13:30:29.600 回答
5

目前的答案似乎是 Jamie Cansdale 的 Silverlight Nunit 项目模板:

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

这个模板很棒,正是我想要的。它也适用于 Resharper!我希望这可以节省其他人几个小时。

于 2009-04-13T08:18:27.507 回答
4

我构建了一个用于持续集成和加速通用 Silverlight TDD 的工具......

http://www.StatLight.net

它现在完全支持编译为在 Silverlight 下运行的任何版本的 NUnit。

于 2009-04-13T15:40:31.280 回答
1

对我有用的是确保“复制本地”属性(在参考系统的 IDE 属性网格 (F4) 中)设置为 true。

于 2009-04-29T13:13:57.880 回答
0

听起来像是 Silverlight 3 的问题。你能获得 Moq.Silverlight 和 NUnitSilverlight 的源代码并在 silverlight 3 二进制文件上构建它们吗?这些似乎是用 SL 2 构建的。

于 2009-04-13T06:58:34.267 回答