Je sais, la question est très ancienne, mais peut-être que quelqu'un a le même problème. 210 J'ai également eu le problème que je voulais tester mes chaînes de ressources dans un test unitaire.
La solution la plus simple consiste à initialiser un ResourceDictionary. Vous pouvez également accéder à une clé spécifique avec dictionary.Keys ["myKey"] et vérifier le contenu.
[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);
}
}
D'ailleurs, cela est la façon dont j'inscrire mes ressources dans le App.xaml.cs (donc je peux les tester par test unitaire):
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();
}
}
Et dans OnStartup:
// add xaml resources (styles, colors, ...)
ResourceManager.AddResources();