Je n'ai pas encore testé la 2.0, car pour l'instant ça ne m'apporte rien
(j'ai vu des fonctionnalités intéressante, mais mon utilisation basique
suffit à ne pas les exploiter).
Et c'est vrai que c'est galère à trouver... pendant 2sec je me suis dit
"mais, ce n'est pas encore une beta??".... et va pour trouver l'info sur
Google (j'ai du passer par InfoQ qui m'a donner le lien sur le blog de
Ayende Rahien).
Moi aussi je mock mes DAO pour tester la couche métier.
Je n'ai pas pensé à l'utilisation de SQLLite, mais ça me semble une
bonne idée.
Ce qu'il manque en .Net, c'est l'équivalent du Java DBUnit...
Comme tu le dis, le but n'est pas de tester NHibernate ou même SQLite,
mais la requête de la DAO.
Dans DBUnit, on part du principe de DBUnit marche sans bug, et on créer
une "moke connexion" à laquelle on ajoute des données comme dans un
DataSet (addRow, etc.). Pour plus de lisibilité, on peut aussi
externaliser les données dans des CSV (connexion.AddData("nom_de_table",
monFichierCSV);). Partant de ce prédicat, tu peux tester ta DAO.
NHibernate utilise d'ailleurs un niveau d'abstraction au dessus de toute
connexion (pour ne pas dépendre de SQLLite ou autre) : IDbProvider. Ce
qui veut dire qu'il serait possible de "mocker" ce provider :
MockDbProvider.
Ceci dit, ça peut aussi devenir fastidieux, car il faudrait mocker aussi
IDbCommand, IDbConnection, IDbDataAdapter, etc.
De plus, cela requiert une bonne connaissance de NHibernate.
Ensuite, je suis fan de l'agile et du "on ne fait que ce qui est
nécessaire" (ok, c'est un peu fainéant comme philosophie).
Ce qui veut dire que si mes services ne font que relayer une méthode de
la DAO, pas besoin de test unitaire pour ça. Heureusement je n'ai pas de
NCover pour me gronder :)
Par contre, je ne comprend pas trop un truc : c'est une couche
supplémentaire les "Repositories" ?
Pour ma part, je suis plus orienté Domain Driven Design, et non Data. En
gros, si mon application n'a pas pour but final de manipuler des données
(contrairement à une appli de migration), si je me sert de la couche de
persistance SEULEMENT pour persister, je privilégie le modèle objet.
Donc les tables ressemblent au modèle, et non l'inverse.
En fait, je commence vraiment à être allergique à ceux qui résonnent
d'abord relationnel avant de faire le modèle objet... le relationnel
n'étant pas un but, mais un moyen de persister. Si on avait des bases de
données objets comme DB4O, on ne se poserait même pas la question.
Il est vrai par contre qu'on a des DTO pour des raisons techniques
(performance) et je comprend dans ce cas l'intérêt d'une couche
intermédiaire, et la nécessiter de faire du mapping Objet-Objet comme
Romain a eu besoin de faire...
(Désolé, je dérive souvent, et je viens de me rendre compte que je parle
plus de test unitaires :))
A+
Gauthier Segay a écrit :
results.Count.ShouldEqual(2);
results[0].Name.ShouldEqual("Product1");
results[0].IsTopProduct.ShouldBeTrue();