2010-01-20 8 views
3

J'ai une couche de logique métier avec un large spectre de classes et leurs méthodes correspondantes. Créer un test unitaire pour une méthode est généralement donné mais, dans certains cas, la méthode renvoie simplement un ensemble d'enregistrements correspondants de la base de données. Il semble assez stupide d'écrire un test unitaire, par exemple, en stockant cinq enregistrements correspondants, puis en appelant la méthode BLL et de voir si elle renvoie tous les cinq enregistrements.Est-ce que vous devez tester des méthodes de logique métier qui consistent principalement en une requête?

Quelle est la meilleure pratique ici? Qu'est-ce que vous faites - par opposition à ce que vous aimeriez dire que vous feriez idéalement?

+0

+1 pour «Que faites-vous réellement?» – lance

+0

Lol-thx. Je prêche habituellement d'un cran plus haut que je ne pratique réellement quand les horaires sont serrés. Ce qui me rappelle ... J'ai quelques tests unitaires à écrire. –

Répondre

4

Je crois que la vraie question est ici, pourquoi avez-vous des méthodes dans votre couche logique d'affaires qui ne semblent pas contenir de réelle logique métier?

Dans ce cas, il semble que la méthode en question est juste une méthode de style référentiel pour récupérer les enregistrements correspondant à certains critères de la base de données.

Dans les deux cas, je testerais toujours la méthode Unit. Il y a plusieurs raisons:

  1. Puisque la méthode est dans la couche logique métier (dans votre cas), il est possible que la méthode pourrait finir par devenir plus impliqués. L'ajout du test unitaire garantira que même dans l'avenir, quelle que soit la logique, la méthode est encore testée pour un comportement inattendu.

  2. S'il y a une logique du tout (comme la détermination qui enregistre correspondent aux critères commerciaux), il vous reste à tester cette logique. Si vous finissez par déplacer la méthode vers la couche de données, vous devez tester votre requête par rapport à un référentiel de données fictif pour vous assurer que vos requêtes fonctionnent. De cette façon, si vos requêtes deviennent plus complexes à l'avenir ... vous êtes couvert.

+0

La raison de ces méthodes est que je ne souhaite aucun appel de couche de données dans le code de l'interface utilisateur. Dans mon cas, la couche de données est assez mince aussi: une interface de style fluide qui facilite les requêtes (avec un générateur de code T-SQL donc j'utilise généralement des instances de classe fortement typées lorsque je travaille avec des données). –

0

J'utilise DBUnit pour remplir la base de données avec un certain nombre de dossiers, plus doivent être retournés par la requête. Ensuite, appelez la méthode et assurez-vous que seuls les enregistrements corrects sont renvoyés. Cela garantit que votre logique de requête fonctionne et permet d'intercepter les problèmes de régression à l'avenir si vous refactorisez la base de données.