Je viens de terminer un tutoriel pour le développement piloté par les tests en C# avec Nunit. Je veux maintenant utiliser des tests unitaires pour mon nouveau projet, mais j'ai des difficultés à écrire des tests. Comment écrire au mieux des tests unitaires pour des classes impliquant un accès à la base de données ou au service web? Quelqu'un peut-il me donner des exemples de cours/tests unitaires?Comment tester des classes impliquant Database et Exchange Server Access?
3
A
Répondre
5
- Conception d'une interface enveloppant la fonctionnalité d'appeler db, l'envoi d'e-mail, ...
- écrire une implémentation de votre classe et charger la cette classe dans la classe dépendante en utilisant DI
- Utilisez un cadre de simulation pour créez un objet Mock et définissez les attentes dans votre test unitaire.
Voici un pseudo-code exemple (générateur Mock utilisé ici est Moq cadre):
interface IEmailer
{
void Send(Email email);
}
class RealEmailer : IEmailer
{
public void Send(Email email)
{
// send
}
}
class UsesEmailer
{
private IEmailer _emailer;
public UsesEmailer(IEmailer emailer)
{
_emailer = emailer;
}
public foo(Email email)
{
// does other stuff
// ...
// now sends email
_emailer.Send(email);
}
}
class MyUnitTest
{
[Test]
public Test_foo()
{
Mock<IEmailer> mock = new Mock<IEmailer>();
Email m = new Email();
mock.Expect(e => e.Send(It.Is<Email>(m)));
UsesEmailer u = new UsesEmailer(mock.Object);
u.Send(m);
mock.Verify();
}
}
MISE À JOUR
Maintenant, si vous testez RealEmailer
, il sont quelques façons, mais fondamentalement, vous devrez configurer le test pour vous envoyer en email et vous vérifiez dans le. Ce n'est pas tout à fait un test unitaire puisque vous testez non seulement votre code mais la configuration, le réseau, le serveur d'échange, ... en fait si vous faites RealEmailer
petit ayant peu de code, vous pouvez sauter le test d'unité d'écriture.
Questions connexes
- 1. Access Database Security Question
- 2. Access DataBase Query
- 3. Comment tester les classes et méthodes internes?
- 4. C# Exchange Server Connection
- 5. Structure organisationnelle Exchange Server
- 6. Access Database connect C# directeur local
- 7. MS Access Database Case à cocher Liste des filtres manquants sur le backend SQL Server
- 8. Sql Database Server
- 9. Chaîne de connexion pour Ms Access Database
- 10. Netbeans. "Entiry classes from database" et domaines Postgresql
- 11. @Override provoque des problèmes avec la hiérarchie des classes impliquant interface, classe abstraite et classe concrète
- 12. ActionMailer et Exchange
- 13. SQL Server 2005 Database Backup
- 14. Comment tester unitaire de classes génériques
- 15. SQL Server et mon avec configuration dataBase oneClick
- 16. Comment utiliser l'automatisation pour tester une application impliquant des calculs très complexes?
- 17. Aide de requête SQL Server Database
- 18. PHP - Simpletest - Comment tester "inclus" les classes
- 19. Advantage Database Server ORDER BY comportement
- 20. Database Convert SQL Server 2000 à 2005
- 21. Microsoft Exchange Server 2007 Gestion des services Web et des boîtes aux lettres - Développement CRM
- 22. Programmation et DataBase
- 23. Cross-Database information_schema Jointures dans SQL Server
- 24. Comment tester l'unité Client Server Code
- 25. Intégration de SugarCRM avec Microsoft Exchange Server
- 26. Utilisation de Mockito pour tester des classes abstraites
- 27. expression compliquée impliquant logique ET (&&)
- 28. Comment lier des classes et des menus
- 29. Services Web Exchange?
- 30. Comment tester la gestion des erreurs impliquant des erreurs d'hôte distant avec le serveur de développement ASP.NET?
Merci pour votre réponse. Mais que signifie DI? – Luke
C'est injection de dépendance. Vous pouvez utiliser NInject, Windsor Castle, StructureMap, Spring.NET ou Unity. J'utilise Windsor. – Aliostad
J'ai une autre question: Puis-je utiliser moq avec Nunit? – Luke