【问题标题】:Silverlight 5 VS 2012 Unit TestsSilverlight 5 VS 2012 单元测试
【发布时间】:2013-02-26 20:22:13
【问题描述】:

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

许多帖子都提到了“Silverlight 单元测试项目”,它是 Silverlight 工具包的一部分。但是我下载了工具包还是没有Test Project,好像只有VS 2010才有?

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

  1. Microsoft.Silverlight.Testing
  2. Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight

以及下面的TestClass:

using Microsoft.Silverlight.Testing;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTesting
{
    [TestClass]
    public class Class
    {

        [TestMethod]
        public void TestMethod()
        {
            .....    
        }
    }
}

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

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

【问题讨论】:

  • 尝试编辑csproj文件并在ProjectGuid之后添加以下标签<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
  • 项目不会在 VS 重启时加载 :(

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


【解决方案1】:

这个链接有适合我的答案:

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

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

【讨论】:

    【解决方案2】:

    为了完成这个话题,

    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 将运行您的单元测试。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 测试发现器“TestDiscoverer”加载测试时发生异常。例外:无法加载文件或程序集“Microsoft.Silverlight.Testing,Version=5.0.5.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。系统找不到指定的文件。
      • 设法将所需文件添加到全局程序集
      • 更新:运行测试但测试没有完成即使只有 Asssert.AreEqual(true, true);
      • 我做了同样的步骤,重新启动了 VS 2012 Premium 并得到了同样的结果。
      • 我创建了全新的 Silverlight 5 类库项目。引用的 Silverlight Toolkit 测试库。没有自定义参考。我将所有引用的程序集 Copy local 设为 true 并修复了测试运行。工具文档3rd party assemblies which are referenced (except Silverlight Toolkit) need to be placed to the OutDir of the project (e.g. via CopyLocal option)。我在默认目录中安装了最新官方版本的 Silverlight SDK 和 Silverlight Toolkit,但这些似乎失败了。
      【解决方案4】:

      我能够运行一些测试:

      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 -> 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>

      注意事项:

      1. 回想一下,Silverlight 5 程序集的格式与 .NET 4.5 相同。
      2. 测试失败,因为 .NET 4.5 程序集是项目的默认程序集,我们需要通过 HintPath 覆盖。我认为通过 MSBuild 脚本修改和/或程序集绑定重定向可能还有其他方式。
      3. .NET 核心程序集从 4.5 加载,如果这些与 Silverlight 不同,则可能会失败。我希望不会。
      4. 取决于 Silverlight 托管运行时的功能可能会失败。比如显示 Silverlight 窗口或访问 HTML DOM。这是将代码重构为与 Silverlight 无关的良好指标。可能的错误:
      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()

      表示需要将ActiveX SL 运行时加载到进程中。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多