使用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的标准方法。 问题是:
- 你必须立即运行所有的测试
-
它非常慢。
(比在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项目:
-
然后我将所有测试项目的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在他的博客中提供了,但这是我发现的最新版本):
-
而已! 之后我可以编写我的测试,在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 ……
它现在完全支持编译为在Silverlight下运行的任何NUnit版本。
对我有用的是确保“复制本地”属性(在参考系统的IDE属性网格(F4)中)设置为true。
听起来像Silverlight 3问题。 你能获得Moq.Silverlight和NUnitSilverlight的源代码并在silverlight 3二进制文件上构建它们吗? 看来这些是用SL 2制造的。