找不到具有名称/密钥的资源

我正在尝试使用Silverlight 4 Toolkit对用户界面进行unit testing。

当我尝试实例化UserControl时,它会抛出一个exception,因为在UserControl的XAML中它使用了Style定义的App.xaml。

有没有办法在实例化UserControl之前以某种方式加载资源? 我是以错误的方式来做这件事的吗?

这是unit testing代码:

[TestMethod] public void ExerciseTimePeriodUserInterface() { CustomUserControls.TimePeriodFilter timePeriodFilter = new CustomUserControls.TimePeriodFilter(); } 

这是UserControl中样式的引用:

  

最后,这是App.xaml中定义的样式:

         

如果您的所有资源都放入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() 

效果很好。

您不能轻易地将用户控件unit testing脱离上下文。 依赖性太多。

您可以使用unit testing(这应该是所有代码所在的位置)测试视图模型,使用某种forms的GUI自动化(或者如果您无法负担最新的GUI测试工具,则使用人类)来控制Silverlight控件。

正如VC 74暗示的那样,如果你还没有使用MVVM,你可能应该(如果你想进行Silverlightunit testing)。

里克,

基本上,我得到了同样的错误。 之后,我只是将资源和所有定义复制到Test-Projects App.xaml文件(我还有一个Styles.xaml资源),我的UI测试工作没有问题。

当然,它永远不是复制“任何东西”的最佳解决方案,但是,嘿,我真的不关心风格。 此外,您甚至可以为UI测试面板定义自己的样式。

HTH

托马斯