Considérons un débutant en charge de l'injection de dépendances. Nous analysons deux classes pertinentes dans NerdDinner.Injection de dépendances dans NerdDinner - testant réellement votre référentiel ou votre modèle
DinnerRepository de l'application:
FakeDinnerRepository des essais:
Ils mettent en œuvre une logique différente, ce qui est bien sûr nécessaire, l'idée clé est de mettre en œuvre ici la IDinnerRepository
, et fournir différentes implémentations et membres privés. Je comprends que le test est pour le contrôleur, mais je suis préoccupé par le fait qu'il existe deux implémentations différentes de la logique d'accès aux données. Considérez n'importe quel projet qui utilise n'importe quel type de ORM, ADO.NET, SubSonic, ou n'importe quelle saveur d'accès aux données que vous aimez. Oui, vous pouvez configurer votre faux dépôt pour qu'il corresponde au véritable dépôt. Mon souci est qu'au fil du temps, les détails de mise en œuvre dans le repo réel changent. Peut-être une faute de frappe, ou d'autres modifications importantes de détail de l'implémentation dans la requête . Cela conduit à un décalage potentiel de la logique dans le modèle entre le faux et le véritable repo. L'inquiétude est que la mise en œuvre du repo réel et le repo de test ne sont plus synchronisés.
Questions:
- Comment voulez-vous tester le modèle dans ce cas?
- Est-il approprié de tester le modèle?
- Est-ce une question de discipline que de veiller à ce que votre test réponde à la mise en œuvre de la logique métier?
Merci Rune. Ça a du sens. Je suppose que la base de la question est: devriez-vous tester votre accès aux données? On dirait que vous dites «non». –
C'est en fait l'une de ces choses que je lutte avec moi-même en tant que début TDDer. De la façon dont je le comprends actuellement, vos tests unitaires devraient laisser seul l'accès réel aux données, alors que c'est apparemment une bonne idée d'avoir des tests d'intégration qui vérifient également que l'accès aux données fonctionne correctement. Ces tests d'intégration seront plus lents, mais cela devrait être acceptable car ils ne seront probablement pas exécutés aussi souvent que les tests unitaires "purs". –