Silverlight 5 VS 2012单元测试

时间:2013-03-11 15:22:45

标签: c# silverlight unit-testing visual-studio-2012

在过去的几个小时里,我一直在尝试为Silverlight应用程序生成单元测试。

许多帖子都是指“Silverlight单元测试项目”,它是Silverlight工具包的一部分。但是我下载了工具包但仍然没有测试项目,它似乎仅在VS 2010中可用?

我添加了一个“Silverlight类库”项目,并添加了对:

的引用
  1. Microsoft.Silverlight.Testing
  2. Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight
  3. 以及以下TestClass:

    using Microsoft.Silverlight.Testing;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace UnitTesting
    {
        [TestClass]
        public class Class
        {
    
            [TestMethod]
            public void TestMethod()
            {
                .....    
            }
        }
    }
    

    但是Visual Studio 2012测试资源管理器没有发现任何测试。即使在重新构建解决方案并重新启动应用程序之后。

    有人有什么想法吗?这甚至可能吗?

4 个答案:

答案 0 :(得分:5)

此链接的答案对我有用:

http://social.msdn.microsoft.com/Forums/vstudio/en-US/5e991b0d-8061-4c4e-a17d-82b4abd58d6c/vs-2012-silverlight-unittest

  

我建议启动一个新的Silverlight项目并安装   SilverlightToolkit-Testing NuGet包。在您的测试文件中,输入   用于Microsoft.Silverlight.Testing和   Microsoft.VisualStudio.TestTools.UnitTesting并使用常规   [TestClass]和[TestMethod]属性。要运行它们,您可以使用   将RootVisual = UnitTestSystem.CreateTestPage();放入App.Application_Startup()中的工具包测试运行器,   使用Silverlight单元测试适配器(目前在v0.0.1和   并没有真正起作用),或者(迄今为止最好的方法)安装ReSharper   和AgUnit插件。

答案 1 :(得分:4)

要完成此主题,

Silverlight DLLS位于C:\ Program Files(x86)\ Microsoft SDKs \ Silverlight \ v5.0 \ Toolkit \ dec11 \ Testing

我无法让Resharper 7.1运行测试,但this library有帮助。您需要使用7-zip进行提取,以便不阻止DLLS。然后重新启动Visual Studio 2012,Resharper将运行您的单元测试。

答案 2 :(得分:1)

我相信您需要安装Silverlight单元测试适配器才能让测试显示在测试资源管理器中

答案 3 :(得分:1)

我能够进行一些测试:

  1. 鉴于Visual Studio 2012 Professional(带有测试运行器)。

  2. 创建面向.NET 4.5的类库,名称为MyProject.Tests

  3. 参考C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll或您所在的位置。

  4. 按照.NET 4.5的常规测试添加测试。

  5. 将项目引用添加到MyProject - 项目定位Silverlight 5.

  6. 添加一些测试。建立。可能会错过参考错误: Error 12 The type 'System.Xml.Serialization.IXmlSerializable' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Xml, Version=5.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'

  7. 参考C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0\System.Xml.dll

  8. 构建并获得相同的错误。打开*.csproj并确保提示路径: xml <Reference Include="System.Xml"> <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0\System.Xml.dll</HintPath> </Reference>

  9. 运行测试,例如通过右键点击TestMethod - &gt; Run Tests。可能会收到错误: System.IO.FileNotFoundException: Could not load file or assembly 'System.Windows, Version=5.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system cannot find the file specified.WRN: Assembly binding logging is turned OFF. To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1. Note: There is some performance penalty associated with assembly bind failure logging. To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog]. 修复是: <Reference Include="System.Windows"> <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0\System.Windows.dll</HintPath> </Reference>

  10. 注意:

    1. 回想一下,Silverlight 5程序集的格式与.NET 4.5相同。
    2. 测试失败,因为.NET 4.5程序集是项目的默认程序,我们需要通过HintPath覆盖。我认为可能有其他方式通过MSBuild脚本修改和/或程序集绑定重定向。
    3. .NET核心程序集从4.5加载,如果这些程序与Silverlight不同,则可能会失败。我希望不会。
    4. 取决于Silverlight托管运行时的功能可能会失败。就像显示Silverlight窗口或访问HTML DOM一样。哪些是重构代码是Silverlight不可知的好指标。可能的错误:
    5. 
      
             Test Outcome:    Failed
      
             Result Message:  
             System.DllNotFoundException: Unable to load DLL 'agcore': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
             Result StackTrace:   
          at MS.Internal.XcpImports.Application_GetCurrentNative(IntPtr context, IntPtr& obj)
             at MS.Internal.XcpImports.Application_GetCurrent(IntPtr& pApp)
             at System.Windows.Application.get_Current()
      
      
      

      表示需要为SL加载ActiveX运行时。

      1. 引用Silverlight Toolkit版本的测试程序集(内部带有[TestMethod]属性)而不是.NET会导致测试可见,但不会运行。