J'essaye d'écrire quelques tests avec PHPUnit
pour nos diverses classes/méthodes/fonctions. Certains d'entre eux nécessitent une connectivité à la base de données. Évidemment, je voudrais Mock
ceux-ci, afin que je ne change pas notre base de données (s). Est-ce que quelqu'un peut me diriger vers un code qui explique comment faire cela? Je vois beaucoup d'exemples de Mocking, mais rien de spécifique à propos de la base de données.Mocking une connexion de base de données
Répondre
En général, vous ne voulez pas vous moquer de la base de données ou de toute autre dépendance externe similaire. Il est préférable d'envelopper la base de données dans votre code avec quelque chose d'autre, et vous pouvez ensuite vous moquer de l'encapsuleur. Étant donné qu'une base de données peut interagir de différentes manières, alors que votre code et vos tests ne tiennent compte que d'un ou deux, votre encapsuleur de base de données n'a qu'à les implémenter. Ainsi, se moquer de l'emballage devrait être assez simple. Vous aurez également besoin d'un test d'intégration sur le wrapper pour vérifier qu'il fait ce qu'il est censé faire, mais il n'y aura que quelques-uns de ces tests pour ne pas trop ralentir vos tests unitaires.
Mock de base de données
J'écrirait une enveloppe autour des appels à la base de données dans l'application.
Exemple dans le code pseudo
CallDataBase (action, options,...) {
// Code for connectiong to DataBase
}
Alors vous venez de maquette de cette fonction que vous souhaitez d'autres fonctions
CallDataBase (action, options,...) {
return true;
}
De cette façon, vous pouvez se moquer de la base de données sans se soucier que ce soit un webservice ou une connexion à une base de données ou autre. Et vous pouvez l'obtenir vrai ou quoi que ce soit.
Testez votre système gère la réponse de la base de données
Pour prendre cette idée un peu plus loin et de faire vos tests encore plus puissant, vous pouvez utiliser une sorte de paramètres de test ou des paramètres de l'environnement pour contrôler ce qui se passe dans la moquée méthode de base de données. Ensuite, vous pouvez tester avec succès comment vos codes diffèrent les réponses de la base de données.
Encore une fois dans le pseudo-code (en supposant que votre base de données retourne réponse xml):
CallDataBase (action, options,...) {
if TEST_DATABASE_PARAMETER == CORRUPT_XML
return "<xml><</xmy>";
else if TEST_DATABASE_PARAMETER == TIME_OUT
return wait(5000);
else if TEST_DATABASE_PARAMETER == EMPTY_XML
return "";
else if TEST_DATABASE_PARAMETER == REALLY_LONG_XML_RESPONSE
return generate_xml_response(1000000);
}
et les tests de match:
should_raise_error_on_empty_xml_response_from_database() {
TEST_DATABASE_PARAMETER = EMPTY_XML;
CallDataBase(action, option, ...);
assert_error_was_raised(EMPTY_DB_RESPONSE);
assert_written_in_log(EMPTY_DB_RESPONSE_LOG_MESSAGE);
}
...
Et ainsi de suite, vous obtenez le point. S'il vous plaît noter que tous mes exemples sont des cas de test négatifs, mais cela pourrait bien sûr être utilisé pour tester les cas de test positif aussi.
Bonne chance
- 1. Connexion à une base de données MySQL
- 2. Connexion à une base de données Access avec un mot de passe de base de données
- 3. Connexion de l'iPhone à une base de données ODBC
- 4. Connexion de Java à une base de données MySQL
- 5. Pourquoi spécifier une connexion de base de données explicite?
- 6. C# connexion à la base de données
- 7. Connexion à la base de données PHPBB
- 8. Connexion à la base de données PHP
- 9. Crystal Reports Failed Base de données Connexion
- 10. connexion à la base de données asp.net
- 11. Connexion à la base de données dynamique
- 12. Connexion php à la base de données
- 13. Connexion à une base de données en lecture seule
- 14. Connexion à une base de données Oracle en C# .Net
- 15. Connexion à une base de données via le réseau local
- 16. Connexion à une base de données tierce dans Joomla?
- 17. Aide Connexion ascenseur à une base de données Oracle
- 18. Python Connexion à une base de données Fermer
- 19. Connexion à une base de données avec WinAuth
- 20. Connexion à une base de données depuis le début
- 21. Actualisation d'une connexion à une base de données SQL
- 22. Connexion à une base de données dans Dreamweaver CS4 - grisé
- 23. Connexion locale à la base de données
- 24. Fournisseur de chaînes de connexion de base de données centralisé
- 25. restaurer l'erreur de connexion de l'utilisateur de base de données
- 26. Écran de connexion de l'application iPhone + Base de données MySQL
- 27. Modification de la base de données de connexion ASP.NET
- 28. Chaînes de connexion de base de données en lecture seule
- 29. erreurs de connexion de base de données php
- 30. Connexion de la base de données SqlAzure de manière conventionnelle
Je suppose que « se moquant de la base de données » est le mauvais terme. Nous utilisons ezSQL en interne, et je veux me moquer d'elle, pour pouvoir tester tout le reste ... –