Haftungsausschluss: Prisma Novize. Ich lese wütend auf, um die verlorene Zeit wieder gut zu machen:)
Kontext: Ich muss automatisierte Akzeptanztests für eine mit Prism erstellte WPF-Anwendung schreiben.
Probleme: Ich finde, dass es verwickelt ist, wenn man versucht, die Unterstützung von ViewModels und alles, was sie brauchen, ohne die UI zu erstellen.
Ich kann mich hier irren ... Prism erlaubt Ihnen, die Shell mit Namensplaketten (Regionen) zu markieren. Verschiedene Module (isolierte Einheiten) registrieren ihre Ansichten mit den entsprechenden RegionNames. Die Views hängen auch vom ViewModel (ctor injection) ab, das über MEF / Unity injiziert wird.
Die Erstellung der App wird somit an Prism delegiert (oder noch wichtiger an die View). Dies scheint ein erster Blickwinkel zu sein. Dies wirft einen Haken in den Arbeiten für den Start der App ohne die Benutzeroberfläche; Testen mit der Benutzeroberfläche ist ein Schmerz.
Was ich suche, ist ein erster Ansatz des Präsentators, der das gesamte Objekt (ViewModel und Abhängigkeiten) ohne die UI erstellt.
%Vor%Ist es mit Prism4 möglich, Apps anders zu schreiben oder wird es nicht unterstützt?
[Update: Dez. 2011]
Ссылка
Gepostet in den Prismenforen, um mehr Licht zu bekommen; scheint, als wäre es nicht möglich. Die Empfehlung lautet, UI-Tests für Akzeptanztests zu verwenden. Prism komponiert UIs; hat damit eine entscheidende Abhängigkeit von Ansichten.
Ich mag das Prism-Framework, aber ich benutze die Regionen von Prism selten, weil ich denke, dass es mich zu einem View-First-Ansatz zwingt.
Ich mag es nicht, View-First zu verwenden, weil ich denke, dass dadurch einige der Vorteile der Verwendung des MVVM-Entwurfsmusters eliminiert werden, z. B. das Beibehalten der Ebenen und das Testen von Einheiten. Wenn Ihre Ansichten für die Erstellung Ihrer ViewModels verantwortlich sind, müssen Sie zum Testen Ihrer ViewModels entweder die Views erstellen, um die ViewModels zu erstellen, oder Sie müssen Ihre ViewModels manuell erstellen.
Ich finde auch, dass eine ideale MVVM-Anwendung es Ihnen ermöglichen sollte, die Anwendung mit jeder Benutzeroberfläche, sogar Befehlszeile auszuführen, und indem ich Regionen verwende, beschränke ich meine ViewModels auf eine Prism-Schnittstelle.
Ich werde immer noch gelegentlich Prism-Regionen verwenden, aber normalerweise nur für die Startseite (z. B. TitelBarRegion, MenuRegion, ContentRegion)
Ich bin mir nicht ganz sicher, ob ich die Frage verstehe, aber zum Unit-Test eine Prismen-App:
Sie können mit dem ServiceLocator ViewModels abrufen:
%Vor%Und dann können Sie das Gerät testen, wie es Ihnen gefällt.
Das heißt, Prism und MVVM im Allgemeinen delegieren die meisten Verantwortlichkeiten an die VM. Die Ansicht ist nur eine Darstellung der Daten, sie enthält keine Logik.
Die VM enthält die Daten / Logik und nimmt die Änderungen vor, ohne zu wissen, an welche Ansicht sie tatsächlich gebunden ist.
Hoffe das hilft =)