2016-07-14 9 views
1

Wir möchten Komponententests einiger serverseitiger Komponenten durchführen, die benannte Abfragen ausführen. Diese Komponentenkonstruktoren erhalten einen EntityManager.Abrufen eines "IsClient = false" EntityManagers für Komponententests

Unser Komponententestframework basiert auf NUnit und wir führen die Tests im nicht verteilten Modus aus, um eine zweistufige Implementierung zu simulieren. Leider erzeugt die Erstellung eines EntityManager aus dem Komponententestcode immer einen "Client" -Manager, während wir eine "Server" -Version benötigen (dh die gleiche wie die, die Sie in einer Servermethode erhalten würden). Wenn wir eine Clientversion abrufen, werden einige benannte Abfragen innerhalb des getesteten Codes aufgrund von Sicherheitseinschränkungen des Modells abgelehnt.

Gibt es eine gute Möglichkeit, den EntityManager abzurufen und irgendwie das Serververhalten auf der Unit-Testseite zu simulieren? Das Beste, was ich bisher gemacht habe, war eine dedizierte Servermethode aufzurufen, den EntityServer irgendwo in einer globalen Variablen zu speichern und diese aus den Komponententests zu verwenden.

Grüße

Antwort

2

Wie Sie gefunden haben, ist DF nicht besonders freundlich Unit-Test und der Ansatz, den Sie verwenden ist eine gute Abhilfe.

DevForce "serverseitige" Komponenten wie IEntityLoginManager, EntityServerQueryInterceptors usw. werden unabhängig von der tatsächlichen Bereitstellung immer (falls gefunden) aufgerufen. Selbst wenn 2-Tier-Unit-Tests ausgeführt werden, startet DF einen In-Memory-EntityServer und sucht nach serverseitigen Komponenten, um eine Anfrage von einem EntityManager zu erfüllen.

Wenn Sie Probleme mit ClientCanQuery-Berechtigungsprüfungen haben, bedeutet dies, dass die standardmäßige EntityServerQueryInterceptor-Berechtigungslogik aktiviert wird. Sie können einen benutzerdefinierten Interceptor zu Testzwecken mithilfe der Funktion "Kompositionskontext" von DevForce implementieren. Mit einem benutzerdefinierten Test-Interceptor können Sie die Standardautorisierungslogik überschreiben, damit diese Abfragen ausgeführt werden können. Es gibt einige Informationen zur Verwendung von Zusammensetzungskontexten mit Tests here.

Wenn Sie alternativ die Bedeutung von "unit" testen möchten und serverseitige Komponenten unabhängig voneinander aufgerufen werden, können Sie einfache clientseitige Komponententests schreiben, die die spezifische serverseitige Logik auslösen, die Sie suchen Prüfung. Beispielsweise führt eine einfache benannte Abfrage, die auf dem Client aufgerufen wird, dazu, dass in Ihrem benannten Abfrageanbieter und/oder Abfrage-Interceptor eine bestimmte Logik ausgeführt wird, und der Test kann die Ergebnisse verifizieren.

Verwandte Themen