2009-07-08 11 views
0

Ich arbeite an einem Legacy-System, das gespeicherte Procs, Business-Objekte und DTO verwendet: s. Die Geschäftsobjekte und die DTOs haben oft dieselben Eigenschaften. Wenn eine Methode in der Service-Schicht aufgerufen wird, die ein DTO zurückgibt, finden viele Transformationen statt. Gespeicherter Prozess -> Datensatz -> Business-Objekt -> DTO. Wenn eine neue Eigenschaft hinzugefügt wird, vergisst ein Entwickler manchmal, Code hinzuzufügen, der ihn von einem Layer/Objekt zu einem anderen verschiebt.Wie kann ich testen, dass für jede Eigenschaft in einem Objekt ein Wert festgelegt wurde?

In einigen Teilen des Systems löste ich dies mit AutoMapper, die Eigenschaften mit dem gleichen Namen automatisch projiziert.

Meine Frage ist für die anderen Teile. Kann ich irgendwie einen Komponententest schreiben, der prüft, ob jeder Eigenschaft in einem Objekt ein Wert zugewiesen wurde? Auf diese Weise könnte ich einen Integrationstest schreiben, der unsere Service-Schicht aufruft, und alle Transformationen müssen erfolgreich sein, damit der Test bestanden wird.

Ich denke, die Lösung würde Reflexion beinhalten.

Antwort

0

Reflection ist eine Möglichkeit, aber es hat seine Vorbehalte, wenn Sie eine Eigenschaft auf den Standardwert setzen, werden Sie nicht auf die Tatsache, die es gesetzt wurde, nehmen.

Sie können mit einem echten Proxy abfangen und dann auf alle Eigentumsänderungen zuhören. See the code here für einen Basis-Interceptor, den Sie verwenden können. Hinweis: Interzeptoren bedeuten, dass Sie Ihr Objekt als MarshalByRefObject verwenden müssen, was nicht unbedingt etwas sein soll. Die andere Möglichkeit besteht darin, Ihrer Fabrik zu sagen, dass sie das Objekt einpacken soll, bevor es es im Testszenario zurückgibt. Etwas, das Ninject oder viele andere Inversionen von Kontroll-Bibliotheken erlauben wird.

+0

True über die Standardwerte. Wir verwenden heute keinen IoC-Container, aber der Bedarf wird jeden Tag größer. – jimmystormig

0

Ja, Reflexion wäre der richtige Weg.

Es ist wahrscheinlich am besten, den Komponententest für einige Mock-Objekte durchzuführen, sodass Sie einen bekannten Wert zum Testen haben.

0

Vielleicht könnten Sie Ihre BO/DTO zu implementieren INotifyPropertyChanged Schnittstelle. Auf diese Weise könnten Sie einen Listener einrichten, um Ihrem Einheits-/Integrationstest mitzuteilen, welche Eigenschaften geändert wurden.

In Listener speichern Sie die Liste aller geänderten Eigenschaften und mit Reflektion können Sie einchecken, gibt es zusätzliche Eigenschaften, die nicht in der Liste sind.

Verwandte Themen