使用Moq,Silverlight和NUnit进行unit testing

我正在尝试对Silverlight 3项目进行unit testing。 我在用:

  • Moq.Silverlight(3.0.308.2)
  • NUnitSilverlight( http://www.jeff.wilcox.name/2009/01/nunit-and-silverlight/ )

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

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

但是当我运行使用Moq的unit testing时,我总是这样:

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.b__b() in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.cs: line 387 at Moq.PexProtector.Invoke(Func`1 function) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\PexProtector.cs: line 17 at Moq.Mock.Setup(Mock mock, Expression`1 expression) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.cs: line 371 at Moq.Mock`1.Setup(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 Silverlightunit testing框架上运行测试。

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

这是浏览器中的测试框架,似乎是unit testingSL的标准方法。 问题是:

  1. 你必须立即运行所有的测试
  2. 它非常慢。

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

有没有人知道任何其他SL测试框架或更好的方法来运行针对此框架的测试?

当我尝试使用TestDriven.Net的vs插件时,我收到一个错误:

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

感谢Lee提供的信息,以及他提供的链接( http://weblogs.asp.net/nunitaddin/archive/2008/05/01/silverlight-nunit-projects.aspx ),我得到了我的Silverlight NUnit使用代码覆盖在Hudson中运行的测试! 太棒了!嘿! 而且他们也和ReSharper一起运行,所以我觉得我不再受到惩罚(延迟20秒)在Silverlight中做TDD 。

那么,我到底做了什么?

  • 我为SL3制作了一个Silverlight Unit Test Framework项目:

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

  • 然后我将所有测试项目的Silverlight程序集的引用(除了’mscorlib’)更改为’Copy Local:True’,如下所述:

    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 Test Framework 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 )项目方面发表博客。

呼。 这就是所有人!

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

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

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

我构建了一个用于持续集成的工具,并加速了一般的Silverlight TDD ……

http://www.StatLight.net

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

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

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