我正在尝试使用Silverlight 4 Toolkit对用户界面进行单元测试。
当我尝试实例化UserControl时,它会抛出一个异常,因为在UserControl的XAML中它使用了Style定义的App.xaml。
在我实例化UserControl之前,有没有办法以某种方式加载资源?我是以错误的方式解决这个问题吗?
这是单元测试代码:
[TestMethod]
public void ExerciseTimePeriodUserInterface()
{
CustomUserControls.TimePeriodFilter timePeriodFilter = new CustomUserControls.TimePeriodFilter();
}
以下是对UserControl中样式的引用:
<Border Style="{StaticResource FilterBorderWrapper}">
最后,这是App.xaml中定义的样式:
<Style TargetType="Border" x:Key="FilterBorderWrapper">
<Setter Property="Background" Value="#F1F5FB" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="BorderBrush" Value="#CBD9E9" />
<Setter Property="CornerRadius" Value="2" />
<Setter Property="Margin" Value="2" />
</Style>
答案 0 :(得分:1)
如果您的所有资源都放入ResorceDictionaries。您可以简单地创建Application实例并将该Dictionary添加到资源中。请看样本:
Application _app = new Application();
ResourceDictionary dictionary = new ResourceDictionary();
dictionary.Source = new Uri("pack://application:,,,/Gui.Mvvm;component/Themes/YourResourceDictionary.xaml");
_app.Resources.MergedDictionaries.Add(dictionary);
对于我的WPF应用程序,这很好用。编写完代码后,我能够测试我的模板选择器,DataTemplate选择器等等。代码隐藏中使用的所有代码都调用
Application.Current.FindResource()
效果很好。
答案 1 :(得分:0)
您不能轻易地将用户控件单元测试脱离上下文。依赖性太多。
您可以使用单元测试(无论如何应该是所有代码的位置)测试您的视图模型,并使用某种形式的GUI自动化(或者如果您无法负担最新的GUI测试工具的人类)来控制Silverlight控件。 / p>
正如VC 74暗示的那样,如果你还没有使用MVVM,你可能应该(如果你想进行Silverlight单元测试)。
答案 2 :(得分:0)
瑞克,
基本上,我得到了同样的错误。之后,我只是将资源和所有定义复制到Test-ProjectsApp.xaml
文件(我也有一个Styles.xaml
资源),我的UI测试没有问题。
当然,它绝不是复制“任何东西”的最佳解决方案,但是,嘿,我真的不关心风格。另外,您甚至可以为UI测试面板定义自己的样式。
HTH
托马斯