C# 使用Moq、Silverlight和NUnit进行单元测试
我正在尝试对Silverlight3项目进行单元测试。我正在使用:C# 使用Moq、Silverlight和NUnit进行单元测试,c#,silverlight,nunit,moq,C#,Silverlight,Nunit,Moq,我正在尝试对Silverlight3项目进行单元测试。我正在使用: 最小起订量Silverlight(3.0.308.2) 努尼茨尔弗莱特() 当我编写一个不使用的测试时,它会正常工作 当我在测试之外使用最小起重量时,最小起重量应该是正常的。 (我模拟了一个界面,并在按钮处理程序中进行了验证作为证明。) 但是,当我运行使用Moq的单元测试时,我总是得到以下结果: System.IO.FileNotFoundException: Could not load file or assembly
- 最小起订量Silverlight(3.0.308.2)
- 努尼茨尔弗莱特()
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
System.IO.FileNotFoundException:无法加载文件或程序集“System,Version=2.0.5.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e”或其依赖项之一。系统找不到指定的文件。
在Moq.ExpressionExtensions.ToStringFixVisitor..ctor(表达式)
在c:\Build\Moq-Drop\Moq\WorkingDirectory\trunk\Source\Interceptor.cs中的Moq.Interceptor.AddCall(IProxyCall调用,SetupKind类)处:第104行
在c:\Build\Moq Drop\Moq\WorkingDirectory\trunk\Source\Mock.cs中的Moq.Mock.c\uu显示classc`2.b\uu b():第387行
在c:\Build\Moq Drop\Moq\WorkingDirectory\trunk\Source\PexProtector.cs中的Moq.PexProtector.Invoke(Func`1函数)处:第17行
在c:\Build\Moq-Drop\Moq\WorkingDirectory\trunk\Source\Mock.cs中的Moq.Mock.Setup(Mock-Mock,表达式`1 Expression)处:第371行
在c:\Build\Moq Drop\Moq\WorkingDirectory\trunk\Source\Mock.Generic.cs中的Moq.Mock`1.Setup(表达式`1 Expression)处:第194行
在Test1.cs中的SilverlightMoq.Test1.TestFirst()处:第23行
怎么能修好呢
我为SL 3重建了两个程序集,结果相同 我能够在MicrosoftSilverlight单元测试框架上运行测试 这是浏览器内测试框架,似乎是单元测试SL的标准方法。问题是:
System.IO.FileNotFoundException:无法加载文件或程序集的系统,听起来像是Silverlight 3的问题。你能获得Moq.Silverlight和NUnitSilverlight的源代码并在silverlight3二进制文件上构建它们吗?这些似乎是用SL 2构建的。目前的答案似乎是Jamie Cansdale的Silverlight Nunit项目模板:
这个模板非常棒,正是我想要的。它也适用于Resharper!我希望这能为其他人节省几个小时 我构建了一个用于持续集成和加速通用Silverlight TDD的工具
现在,它完全支持在Silverlight下运行的任何版本的NUnit。对我来说有效的是确保“复制本地”属性(在参考系统的IDE属性网格(F4)中)设置为true。感谢Lee提供的信息和他提供的链接 () 我能够让我的Silverlight测试在代码覆盖率下运行!太棒了嘿!而且他们也和我一起跑,所以我觉得我不会因为在Silverlight中的表现而再受到惩罚(延迟20秒) 那么,我到底做了什么
- 我为SL3制作了一个Silverlight单元测试框架项目: ()
- 然后,我将测试项目的所有Silverlight程序集的引用(除了“mscorlib”)更改为“Copy Local:True”,如中所述: ()
- 然后我添加了对以下博客中提供的Silverlight NUnit 2.5.1框架的引用(我在下面提到的博客中有Jeff Willcox提供的其他版本,在上面提到的博客中有Jamie Cansdale提供的其他版本,但这是我发现的最新版本): ()
- 就这样!之后,我可以编写测试,在ReSharper中运行它们,并从NUnit测试运行程序中运行它们!另外,我可以使用ncover来获取报道
- 编辑:哦,是的,如果您运行任何需要UI线程的测试,您将在ReSharper中得到一个跨线程错误。这可以通过在
调用中执行这些测试来解决Deployment.Current.Dispatcher.BeginInvoke(…)
- 在使用unit进行测试之后,我无法从SL测试框架web界面运行它们,但这对我来说不是太大的问题。如果您确实需要使其正常工作,请查看: ()
- PS:我还为NUnit控制台运行程序创建了一个NUnit项目,以从NUnit控制台运行我的测试(不要尝试在同一个NUnit项目中包含非SL测试程序集,因为它使用不同的NUnit.framework库,所以无法工作)
呼。这就是所有的人 @MarkWhitfeld有没有办法在本机测试浏览器窗口中显示结果?不确定@jay,我在过去4年中没有做过silverlight项目。从那时起,情况可能发生了很大变化。