【发布时间】:2012-03-01 20:10:31
【问题描述】:
我有一些我正在为 WPF 应用程序编写的单元测试,尽管我尽量避免它,但我有一些正在测试的代码实例化了一个视图。一旦实例化视图,就会评估所有标记扩展、样式等。为了解决这个问题,我创建了一个虚拟 Application 并在初始化测试程序集时注册了所有必需的资源:
[TestClass]
public class AssemblyInitialize
{
[AssemblyInitialize]
public static void SetupTestAssembly(TestContext context)
{
if (Application.Current == null)
new Application();
var resources = new List<string>
{
"pack://application:,,,/AssemblyName;component/ResourceDictionary.xaml"
};
foreach(var resource in resources)
{
var uri = new Uri(resource);
var dictionary = new ResourceDictionary { Source = uri };
Application.Current.Resources.MergedDictionaries.Add(dictionary);
}
}
}
我以前用过这种方法,效果还不错。
我在使用这种方法时遇到了一个小障碍。我有一些在 pack Uri 中使用 pack://siteoforigin: 的资源,当测试实例化此视图时,我收到有关无法解析文件的错误。
XAML:
<ResourceDictionary
xmlns="...">
<ImageBrush
x:Key="ResourceName"
ImageSource="pack://siteoforigin:,,,/Resources/image.png"
/>
</ResourceDictionary>
错误信息:
Could not find a part of the path 'C:\\Solution\\TestResults\\Workspace_2012-03-01 14_54_29\\Resources\\image.png'
我已将 Resources 目录添加为部署项,并且我已确认该图像是 TestRun 输出目录。似乎 AppDomain 正在运行我的测试程序集位置上方的一个文件夹,因为该文件实际上位于:
c:\Solution\TestResults\Workspace_2012-03-01 14_54_29\ 输出 \Resources\image.png
关于如何让 WPF 应用程序使用 Out 目录作为其主文件夹的任何建议?
【问题讨论】:
-
手动强制应用程序域的基本文件夹是否有效?
AppDomain.CurrentDomain.SetData("APPBASE", "FolderNameHere");似乎有更好的方法,但我的记忆力让我失望。这可能足够好(tm)。 -
已经研究了好几个小时了。 AppDomain.CurrentDomain.BaseDirectory 返回 Out 文件夹。
标签: wpf unit-testing mstest vs-unit-testing-framework