Je travaille sur un projet où il y a beaucoup de messages de service externes. Une bonne façon de le décrire d'une manière légèrement «hyperbolique» serait une application où le système doit envoyer des messages à l'API Flicker, à l'API Facebook et à l'API Netflix. Pour prendre en charge les scénarios déconnectés, les problèmes de journalisation, la convivialité du développeur, la configuration, etc ... J'ai expérimenté une approche qui utilise fortement les génériques et les arbres d'expression. Le résultat final ressemble à ceci:Utilisation d'objets simulés en dehors des tests, mauvaise pratique?
Messenger<NetflixApi>.SendCustom(netflix => netflix.RecommendMovie("my message"));
Je suis satisfait de l'ensemble du résultat final, mais l'impression que je l'ai fait une erreur, ou une conception principale négligé quelque part en ce qui concerne les tests et les scénarios déconnectés. Pendant les tests, automatisés, unitaires ou humains, j'ai implémenté une fabrique d'objets qui utilisait initialement DI pour effectuer l'action correcte en "mode direct" et utilisé des Mocks pour fournir une sorte de messager stérile qui ne fonctionne pas. t faire quoi que ce soit du tout quand dans un mode de test.
Je n'ai vu ou lu que des Mocks utilisés en mode TDD pur et n'étant pas utilisés comme des objets stupides. Les approches que j'ai vues tourneraient autour du stubbing ou se moquer de la fonctionnalité de communication HTTP dont dépendent toutes les API que j'utilise. Ma principale préoccupation est que tous les différents services auxquels je m'attends me feraient un travail granulaire en substituant une implémentation HTTP spécifique et si j'utilisais une approche stub, j'aurais 3 classes pour chacun de ces services (IService, ConcreteService, StubService) et le maintien de ceux-ci lors de la mise en œuvre d'une nouvelle méthode ou de tout changer serait un vrai PITA.
Dans l'implémentation actuelle, j'utilise Mocks pour obtenir gratuitement le "mode stérile" sans avoir à implémenter quoi que ce soit de plus pour se conformer à un certain principe de test.
La question est de savoir s'il me manque quelque chose? Ai-je violé un concepteur utilisant Mocks d'une manière plus ... pratique?
Quelqu'un peut-il offrir des conseils sur la façon d'obtenir un mode stérile à partir de nombreux services extérieurs différents sans passer par beaucoup de cerceaux?
Cette question a-t-elle un sens?
Merci pour toutes les réponses.
Edit # 1:
je n'étais pas clair dans ma question initiale. Tous les objets NULL ou Mock doivent être utilisés uniquement dans un environnement de développement/débogage/test. En production le code qui envoie ces messages sera l'implémentation réelle de ceux-ci.
J'ai voté pour tout le monde parce qu'il semble y avoir beaucoup de solutions différentes à ce problème et je vais explorer chacun d'eux.
S'il vous plaît ne pense pas que cette question a été répondu pour le moment, j'apprécierais autant de conseils que je peux obtenir.
La seconde fois que j'ai vu le sujet de ce fil, une alerte "Null Object" rouge s'est ... – abyx