我正在尝试对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的标准方法。问题是:
它非常慢。
(比在nunit测试框架中运行的相同测试慢〜5倍)
有没有人知道任何其他SL测试框架或更好的方法来运行针对此框架的测试?
当我尝试使用TestDriven.Net的vs插件时,我收到一个错误:
System.IO.FileNotFoundException:无法加载文件或程序集'系统,...
答案 0 :(得分:9)
感谢Lee提供的信息以及他提供的链接 (http://weblogs.asp.net/nunitaddin/archive/2008/05/01/silverlight-nunit-projects.aspx) 我能够在NUnit中使用代码覆盖率运行我的Silverlight Hudson测试!太棒了!嘿!它们也与ReSharper一起运行,所以我不觉得我在Silverlight中做TDD不再受到惩罚(延迟20秒)。
那么,我到底做了什么?
我为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(...)
调用中执行这些测试来解决。
在我的测试中使用unit之后,我无法从SL Test Framework Web界面运行它们,但这对我来说并不是一个问题。如果你确实需要这个工作,那么看看:
(http://www.jeff.wilcox.name/2009/01/nunit-and-silverlight/)
我还尝试过StatLight(http://statlight.codeplex.com/)来从控制台运行测试,这对我很有用,但我是ReSharper和NUnit的粉丝,所以这对我来说不是最好的选择。 StatLight还有一个奇怪的错误,它没有正确加载我的测试项目资源,导致一些测试失败。
我希望这有助于某人。我没有在这里提出任何新内容,而是整合了我希望有人事先为我总结的所有信息。当我得到一些时间时,我将在与SilverLight创建Habanero框架(http://www.habanerolabs.com)项目方面发表博客。
呼。这就是所有人!
答案 1 :(得分:5)
目前答案似乎是Jamie Cansdale的Silverlight Nunit项目模板:
http://weblogs.asp.net/nunitaddin/archive/2008/05/01/silverlight-nunit-projects.aspx
这个模板很精彩,正是我想要的。它也适用于Resharper!我希望这可以节省几个小时的其他人。
答案 2 :(得分:4)
我构建了一个用于持续集成的工具,并加速了一般的Silverlight TDD ......
它现在完全支持编译为在Silverlight下运行的任何NUnit版本。
答案 3 :(得分:1)
对我有用的是确保“复制本地”属性(在参考系统的IDE属性网格(F4)中)设置为true。
答案 4 :(得分:0)
听起来像Silverlight 3问题。你能获得Moq.Silverlight和NUnitSilverlight的源代码并在silverlight 3二进制文件上构建它们吗?看起来这些是用SL 2构建的。