2009-06-17 4 views
3

Lors de l'écriture d'un test pour les données continuellement stockées, je viens avec un test le long des lignes de:test unitaire d'écriture pour la création de données persistantes et la suppression

[TestMethod] 
public void DoCreateDeleteTest() { 
    PersistentDataStore pds = new PersistentDataStore(); 
    bool createSuccess = pds.Save("id", "payload"); 
    Assert.AreEqual(true, createSuccess); 
    bool deleteSuccess = pds.Delete("id"); 
    Assert.AreEqual(true, deleteSuccess); 
} 

Tant que tout fonctionne, cela semble bien. La fonction n'a aucune dépendance antérieure et elle nettoie après elle-même. Le problème est: lorsque la méthode .Save() effectue l'enregistrement mais retourne false/failure. L'assertion se déclenche et la suppression n'est pas appelée, donc elle ne nettoie pas après elle-même. Après cela, il y a des données persistantes dans la base de données avec le nom «id» et toutes les sauvegardes futures échouent.

La seule façon que je peux penser pour contourner c'est de faire une suppression de précaution avant la sauvegarde, mais cela semble être un hack.

Répondre

5

Mettez la suppression dans une méthode marquée avec l'attribut TestCleanup (je suppose que vous utilisez MSTest). Par ailleurs, votre test teste également deux choses différentes: si la sauvegarde fonctionne et si elle teste également la suppression. Les tests ne devraient tester qu'une seule chose à la fois.

+0

Merci, je pense que j'ai été accroché à faire le "Test" nettoyer après lui-même plutôt que de s'assurer que le "TestFixture" était propre. L'observation que je testais deux choses différentes était un vrai moment d'oh. – Adrian

0

Enveloppez les deux dans une transaction? Faire une suppression dans une capture?

+1

Si je faisais ce genre de test (qui est vraiment un test d'intégration), j'ai utilisé TransactionScope comme ceci: http://bbits.co.uk/blog/archive/2006/07/31/12741. aspx. Vous pouvez mettre la fonctionnalité dans une classe de test d'unité transactionnelle de base. – RichardOD

Questions connexes