Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Moq、Silverlight和NUnit进行单元测试_C#_Silverlight_Nunit_Moq - Fatal编程技术网

C# 使用Moq、Silverlight和NUnit进行单元测试

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

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

  • 最小起订量Silverlight(3.0.308.2)
  • 努尼茨尔弗莱特()
当我编写一个不使用的测试时,它会正常工作

当我在测试之外使用最小起重量时,最小起重量应该是正常的。 (我模拟了一个界面,并在按钮处理程序中进行了验证作为证明。)

但是,当我运行使用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 
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的标准方法。问题是:

  • 您必须同时运行所有测试

  • 它的速度非常慢

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

  • 有人知道其他SL测试框架吗,或者知道一种更好的方法来针对这个框架运行测试吗

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


    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库,所以无法工作)

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

    我希望这对某人有帮助。我在这里没有提出任何新的想法,只是综合了所有我希望有人提前为我总结的信息。当我有时间的时候,我会在博客上用SilverLight创建一个Habanero框架()项目


    呼。这就是所有的人

    @MarkWhitfeld有没有办法在本机测试浏览器窗口中显示结果?不确定@jay,我在过去4年中没有做过silverlight项目。从那时起,情况可能发生了很大变化。