Ich habe eine funktionale, aber chaotisch WPF MVVM-Anwendung geerbt. Zu meinem Ärger gab es praktisch keine Unit-Tests, die die Annahme MVVM etwas sinnlos machen. Also habe ich beschlossen, etwas hinzuzufügen.Refactoring WPF MVVM für erhöhte Testbarkeit
Nachdem ich die tief hängenden Früchte ergriffen habe, fange ich an, in Schwierigkeiten zu geraten. Es gibt viel Code, der stark voneinander abhängig ist, insbesondere innerhalb der Eigenschaften und Methoden, die in den Ansichten verwendet werden. Es ist zum Beispiel üblich, dass ein Anruf eine Kette von "Eigenschaftsänderungs" -Ereignissen auslöst, die wiederum andere Anrufe auslösen und so weiter.
Dies macht es sehr schwierig zu testen, weil Sie enorme Mocks schreiben müssen und eine große Anzahl von Eigenschaften einrichten, um einzelne Funktionen zu testen. Natürlich müssen Sie es nur einmal pro Klasse tun und dann Ihren Mock und ViewModel bei jedem Test erneut verwenden. Aber es ist immer noch ein Schmerz, und es scheint mir, dass dies der falsche Weg ist. Es wäre sicherlich besser, zu versuchen, den Code zu brechen und ihn modularer zu machen.
Ich bin mir nicht sicher, wie realistisch das in MVVM ist. Und ich bin in einem Teufelskreis, denn ohne gute Tests mache ich mir Sorgen, den Build durch Refactoring zu brechen und gute Tests zu schreiben. Die Tatsache, dass es WPF MVVM ist, ist ein weiteres Problem, da nichts die Interdependenz zwischen View und ViewModel verfolgt - eine unvorsichtige Namensänderung könnte etwas komplett zerstören.
Ich arbeite in C# VS2013 und griff die Testversion von ReSharper, um zu sehen, ob es helfen würde. Es macht Spaß zu benutzen, aber es ist nicht so weit. Meine Erfahrung mit Komponententests ist nicht riesig.
Also - wie kann ich das vernünftig, methodisch und sicher angehen? Und wie kann ich meine vorhandenen Tools (und andere Tools) verwenden, um zu helfen?