2009-07-08 7 views
0

Je travaille sur un système existant qui utilise des process stockés, des objets métier et des DTO: s. Les objets métier et les DTO: s ont souvent les mêmes propriétés. Lorsque vous appelez une méthode dans la couche de service qui renvoie un objet DTO, de nombreuses transformations sont en cours. Processus stocké -> ensemble de données -> objet métier -> DTO. Si une nouvelle propriété est ajoutée, il arrive parfois qu'un développeur oublie d'ajouter du code qui le déplace d'un calque/objet à un autre.Comment est-ce que je teste que chaque propriété dans un objet a été définie/donnée une valeur?

Dans certaines parties du système, j'ai résolu cela en utilisant AutoMapper qui projette automatiquement des propriétés avec le même nom.

Ma question s'adresse aux autres parties. Puis-je en quelque sorte écrire un test unitaire qui vérifie si chaque propriété d'un objet a été définie/donnée une valeur? De cette façon, je pourrais écrire un test d'intégration qui appelle notre couche de service et toutes les transformations doivent réussir pour que le test réussisse.

Je suppose que la solution impliquerait la réflexion.

Répondre

0

La réflexion est une façon, mais elle a ses limites, si vous définissez une propriété à sa valeur par défaut, vous ne comprendrez pas le fait qu'elle a été définie.

Vous pouvez intercepter avec un proxy réel, puis écouter sur tous les changements de propriété. See the code here pour un intercepteur de base que vous pouvez utiliser. Les intercepteurs de note signifient que vous avez besoin que votre objet soit MarshalByRefObject, ce qui peut ne pas être quelque chose que vous voulez. Ainsi, l'autre option consiste à dire à votre usine d'emballer l'objet avant qu'il ne le renvoie dans le scénario de test. Quelque chose que ninject ou beaucoup d'autres inversion de contrôle libs vous permettra de faire.

+0

Vraie sur les valeurs par défaut. Nous n'utilisons pas de conteneur IoC aujourd'hui, mais les besoins augmentent chaque jour. – jimmystormig

0

Oui, la réflexion serait la voie à suivre.

Il est probablement préférable d'effectuer le test unitaire sur certains objets fantaisie. Vous avez donc une valeur connue à tester.

0

Peut-être que vous pourriez changer votre BO/DTO pour implémenter l'interface INotifyPropertyChanged. De cette façon, vous pouvez configurer un écouteur pour indiquer à votre unité/test d'intégration quelles propriétés ont été modifiées.

Dans l'écouteur, vous enregistrez la liste de toutes les propriétés modifiées et, avec la réflexion, vous pouvez enregistrer des propriétés supplémentaires qui ne figurent pas dans la liste.

Questions connexes