2010-09-17 4 views
2

Visual Studio 2010 a généré un tas de tests unitaires pour moi, ce qui semble être pratique, mais je me demande si ce sont des tests unitaires réels. Par exemple, il a généré un test qu'il a appelé SaveTest qui exécute le code suivant:Est-ce que les tests que MsTest génère des tests unitaires réels?

User user = new User(); //I have to create a user 
user.Save(); //This saves the user to the database. 
//Assertions here.... 

Le problème que j'ai ci-dessus est que de ce que j'ai lu, les tests unitaires sont censés tester des choses en isolement, donc en testant économie à la base de données, ce n'est pas un test unitaire ou est-ce que je me trompe et est-ce que MsTest se trompe? En remarque, User est généré à partir de dbml et Save Calles SubmitChanges sur mon DataContext.

Répondre

9

Les tests générés automatiquement sont uniquement des tests unitaires si vous avez déjà effectué le travail nécessaire pour isoler les dépendances afin que les appels avec effets secondaires puissent être routés vers les dépendances simulées ou stubbed appropriées pour détecter les effets souhaités. Les outils ne feront pas le travail d'architecture de votre code pour supporter les tests unitaires; tout ce qu'ils peuvent faire est de créer des appels aux différents points d'accès publics. Vous devrez également faire le travail d'organiser vos états de dépendance pour chaque test et affirmer les conditions que vous souhaitez vérifier.

+0

ah eh bien j'étais sur le point d'appuyer sur sauvegarder avec presque exactement le même +1 pour la vitesse. – tim

2

MSTest, AFAIK, ne sera pas assez intelligent pour savoir comment se moquer des comportements qu'il teste. En tant que tel, si vous ne vous moquez pas des dépendances DB de l'utilisateur, ce n'est pas un test unitaire. Les frameworks de «tests unitaires» tels que MSTest et NUnit fournissent un peu plus que l'environnement dans lequel exécuter une suite de tests programmatiques. Vous décorez une méthode avec l'attribut [Test] ou similaire, et l'exécutera. Ce test peut se faire au niveau de l'unité, de l'intégration, du niveau fonctionnel ou même de l'acceptation, en fonction de la portée du code couvert par le test. Dans notre projet, nous avons tout un assemblage de rien d'autre que des tests d'intégration, qui couvrent des tranches de fonctionnalité verticales entières et même des cas de test d'acceptation client. Tout est écrit en utilisant le framework NUnit. Votre environnement de développement ne peut pas vous empêcher de faire des erreurs de développement; si cela était vrai, il n'y aurait pas besoin d'AQ.

+1

MSUnit? Voulez-vous dire MSTest ou [MbUnit] (http://www.mbunit.com)? –

0

Tous ces frameworks de tests unitaires ne sont pas vraiment contraints de faire des tests unitaires.

Vous pouvez faire beaucoup de types de tests différents avec ceux-ci, y compris des tests complets du système et des tests d'intégration ciblés. Spécialement lorsque vous ajoutez des outils de frameworks supplémentaires à partir de votre code de test/coureur. Si vous avez une classe très mince dont la seule responsabilité est l'intégration avec un système externe, alors si vous créez des tests autour de ce sont des tests d'intégration ciblés et mieux sont effectués sur le système externe. Assurez-vous de les garder séparément des tests unitaires, car ceux-ci seront naturellement plus lents. Si par contre, la classe qui a la dépendance dure au système externe n'est pas juste une classe mince, alors le problème est avec votre code;). Répondez-y, et par nature vos tests n'auront pas ce problème.

Questions connexes