Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie kann man ein ResourceDictionary testen
DeSharper
myCSharp.de - Member



Dabei seit:
Beiträge: 40

Themenstarter:

Wie kann man ein ResourceDictionary testen

beantworten | zitieren | melden

Hallo zusammen,

Ich habe in meiner WPF-Application mehrere ResourceDictionaries für verschiedene Skins. Wenn ein anderer Skin ausgewählt wird, binde ich einfach das entsprechende RessourceDictionary ein. In der GUI sind die entsprechenden Styles alle dynamisch, das funktioniert alles soweit. Aber damit das alles fehlerfrei funktioniert, müssen alle verwendeten Styles auch in allen ResourceDictionaries enthalten sein. Falls irgendwo was fehlt, bekomme ich das nicht direkt mit, ich muss die Anwendung starten und mich überall durchklicken und durch Sichtprüfung feststellen, dass alle Elemente da sind... mittelalterlich!

Daher würde ich das gerne testen. Bisher hab ich da an hundsgewöhnliche Unit-Tests gedacht, auch wenn mir schon klar ist, dass die nicht direkt für den Zweck gemacht sind. Wenn an dem Punkt schon jemand eine bessere, praktikable Lösung hat, nur her damit.

Mein Plan war also, Unit Test -> ResourceDictionary erzeugen -> FindResource("besondersTollerButtonStyle")
Leider bekomme ich es nicht hin mir innerhalb eines Unit-Tests ein ResourceDictionary zu erzeugen, wenn ich dem Dictionary eine Source zuweise, dann knallt es immer.

            
string filePath = GetFilepath(ESkin.DefaultSkin);
Uri uri = new Uri(filePath, UriKind.Absolute);
var rd = (ResourceDictionary) Application.LoadComponent(uri);
Fehler
=> System.ArgumentException: "Absoluter URI kann nicht verwendet werden."
Den URI hab ich an anderer Stelle getestet, mit einem Reader kann ich auf meine ResourceDictionary-Datei zugreifen, das finde ich aber nicht schön, da müsste ich ja stumpf für jeden gesuchten Style die Datei zeilenweise durchlaufen. Sollte das die einzig mögliche Lösung sein, wäre ich enttäuscht.
Obwohl mir nicht klar ist, warum ich LoadComponent nicht mit einem absoluten URI aufrufen können soll, hab ich also mit relativen URIs experimentiert. Erstmal direkt aus meinem bisherigen absoluten (als korrekt angenommenen) URI:


string filePath = GetFilepath(ESkin.DefaultSkin);
Uri uri = new Uri(filePath, UriKind.Absolute);
Uri uriThis = new Uri(Path.GetDirectoryName((Assembly.GetExecutingAssembly().Location)), UriKind.Absolute);
Uri relativeUri = uriThis.MakeRelativeUri(uri);
=> System.NotSupportedException: "Unbekanntes URI-Präfix."
Auch weitere verzweifelte und unbeholfene Versuche haben mich nicht weitergebracht.

Ich weiß nicht mehr weiter, kann mir sagen, wie man sowas sauber machen würde? Oder zumindest die Fehlermeldungen erklären? Oder mir sagen, an welcher Stelle ich mich verrannt habe?
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3429
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

hilft Dir das hier?
Can't load ResourceDictionary from within an UnitTest Project

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
DeSharper
myCSharp.de - Member



Dabei seit:
Beiträge: 40

Themenstarter:

beantworten | zitieren | melden

den hatte ich auch schonmal gefunden. Aber mein Problem ist ja keine NullReference. Der Pfad an sich, kann nich so verkehrt sein. Mit dem selben pfad kann ich über einen fileReader die datei lesen:


string filePath = GetFilepath(ESkin.DefaultSkin);
FileStream stream = File.OpenRead(filePath);
XamlXmlReader reader = new XamlXmlReader(stream);

while (reader.Read())
{
     ...
}
Davon abgesehen bin ich bei 10 Jahre alten Antworten immer ein bisschen skeptisch :) Es gibt jedenfalls bei mir kein TestResults directory mehr. Wo die Tests ausgeführt werden würde ich schon rausbekommen, aber ich hab keine Ahnung was mit "add in the .testrunconfig file" gemeint ist.
Falls das noch aktuell ist, kann mir das jemand erklären?
private Nachricht | Beiträge des Benutzers