Silverlight 5 VS 2012单元测试
本文关键字:单元测试 2012 VS Silverlight | 更新日期: 2023-09-27 18:03:25
在过去的几个小时里,我一直在尝试为Silverlight应用程序生成一个单元测试。
许多帖子提到了"Silverlight单元测试项目",它是Silverlight工具包的一部分。但是我下载了工具包,仍然没有测试项目,它似乎只在VS 2010中可用?
我添加了一个"Silverlight类库"项目,并添加了以下引用:
-
Microsoft.Silverlight.Testing
-
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 Test Explorer没有发现任何测试。即使在重新构建解决方案并重新启动应用程序之后。
有人有什么想法吗?这可能吗?
这个链接有适合我的答案:
http://social.msdn.microsoft.com/forums/vstudio/en us/5e991b0d - 8061 - 4 - c4e a17d - 82 b4abd58d6c/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插件
要完成这个线程,
Silverlight dll位于C:'Program Files (x86)'Microsoft sdk 'Silverlight'v5.0'Toolkit'dec11'Testing
我无法得到Resharper 7.1来运行测试,但是这个库有帮助。您需要使用7-zip进行解压,这样dll才不会被阻塞。然后重新启动Visual Studio 2012, Resharper将运行你的单元测试。
我认为您需要安装Silverlight单元测试适配器才能使测试显示在测试资源管理器
- http://visualstudiogallery.msdn.microsoft.com/caca1e81 becb - 41 - e4 - 9110 bc247f3f400b?src=vside
我可以运行一些测试:
-
给定Visual Studio 2012 Professional(with test runner)
-
创建。net 4.5类库,命名为
MyProject.Tests
。 -
参考
C:'Program Files (x86)'Microsoft Visual Studio 11.0'Common7'IDE'PublicAssemblies'Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
或从您的位置 -
添加
MyProject
项目参考-针对Silverlight 5的项目 -
添加一些测试。构建。可能会得到缺少引用的错误:
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'
-
参考
C:'Program Files (x86)'Reference Assemblies'Microsoft'Framework'Silverlight'v5.0'System.Xml.dll
-
构建并得到相同的错误。打开
*.csproj
并确保提示路径:xml <Reference Include="System.Xml"> <HintPath>C:'Program Files (x86)'Reference Assemblies'Microsoft'Framework'Silverlight'v5.0'System.Xml.dll</HintPath> </Reference>
-
运行测试,例如通过右键单击
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>
指出:
- 回想一下,Silverlight 5程序集的格式与。net 4.5相同。
- 测试失败,因为。net 4.5程序集是项目的默认设置,我们需要通过
HintPath
覆盖。我认为可能有其他方式通过MSBuild脚本修改和/或程序集绑定重定向。 - 。. NET核心程序集是从4.5开始加载的,如果这些程序集与Silverlight不同,可能会失败。我希望不是。
- 依赖于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
运行时加载到进程中。
- 引用Silverlight Toolkit版本的测试程序集(里面有
[TestMethod]
属性)而不是。net会导致测试可见,但不能运行。