Я знаю, вопрос очень старый, но, возможно, у кого-то есть такая же проблема.У меня также была проблема с тем, что я хотел проверить свои строки ресурсов в модульном тесте.
Самое простое решение - инициализировать ResourceDictionary.Вы также можете получить доступ к определенному ключу с помощью dictionary.Keys ["myKey"] и проверить содержимое.
[SetUp]
public void OnTestInitialize()
{
if (!UriParser.IsKnownScheme("pack"))
{
new Application();
}
}
[TestCase]
public void TestIfResourcesExist()
{
var resources = new [] {
"pack://application:,,,/Tracto.UI.Infrastructure;component/Dictionaries/CommonColors.xaml",
"pack://application:,,,/Tracto.UI.Infrastructure;component/Dictionaries/CommonStyles.xaml",
"pack://application:,,,/Tracto.UI.Infrastructure;component/Dictionaries/GridSplitterStyle.xaml"
};
foreach (var mergedResource in resources)
{
// init
ResourceDictionary dictionary =
new ResourceDictionary {Source = new Uri(mergedResource, UriKind.RelativeOrAbsolute)};
// verify
dictionary.Keys.Count.Should().BeGreaterThan(0);
}
}
Кстати, именно так я регистрирую свои ресурсы вApp.xaml.cs (чтобы я мог проверить их на единицу теста):
public static class ResourceManager
{
public static readonly string[] MergedResources = {
"pack://application:,,,/Tracto.UI.Infrastructure;component/Dictionaries/CommonColors.xaml",
"pack://application:,,,/Tracto.UI.Infrastructure;component/Dictionaries/CommonStyles.xaml",
"pack://application:,,,/Tracto.UI.Infrastructure;component/Dictionaries/GridSplitterStyle.xaml"
};
public static void AddResources()
{
Application.Current.Resources.BeginInit();
foreach (var resource in MergedResources)
{
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri(resource, UriKind.Absolute)
});
}
Application.Current.Resources.EndInit();
}
}
И в OnStartup:
// add xaml resources (styles, colors, ...)
ResourceManager.AddResources();