9

在过去的几个小时里,我一直在尝试为 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 测试资源管理器没有发现任何测试。即使在重新构建解决方案并重新启动应用程序之后。

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

4

4 回答 4

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 输入 usings 并使用常规的 [TestClass] 和 [TestMethod] 属性。要运行它们,您可以通过放入RootVisual = UnitTestSystem.CreateTestPage();App.Application_Startup() 来使用 Toolkit 测试运行器,使用 Silverlight 单元测试适配器(当前版本为 v0.0.1,并不能真正工作),或者(迄今为止最好的方法)安装 ReSharper 和 AgUnit 插件。

于 2013-07-12T13:13:37.840 回答
4

为了完成这个线程,

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

我无法让 Resharper 7.1 运行测试,但这个库有帮助。您将需要使用 7-zip 进行解压,以免 DLLS 被阻止。然后重新启动 Visual Studio 2012,Resharper 将运行您的单元测试。

于 2013-05-08T15:46:10.627 回答
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-> 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 程序集是项目的默认设置,我们需要通过 .NET 覆盖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()


表示需要将ActiveXSL 的运行时加载到进程中。

  1. 引用 Silverlight Toolkit 版本的测试程序集([TestMethod]内部带有属性)而不是 .NET 会导致测试可见但不运行的问题。
于 2015-01-27T09:32:57.707 回答
1

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

于 2013-03-11T15:27:39.653 回答