2010-11-16 11 views
4

J'utilise les tests d'intégration NUnit. J'essaie de tester pour s'assurer que l'utilisateur ne peut pas créer un compte avec un e-mail existant. ([email protected])Où est le meilleur endroit pour créer des données de test dans TDD?

Je dois avoir des données de test dans la base de données (compte avec [email protected] email).

Je peux créer ce compte dans la fonction de test, ou dans le script sql (et l'exécuter avant les tests d'intégration).

Où est le meilleur endroit pour créer ces données de test?

Répondre

5

Aucune de ces options est erroné, mais il y a plusieurs façons d'étendre et de consolider votre stratégie:

Aucune de ces solutions sont mut ually exclusif. Je recommanderais le dernier article en particulier (fournisseur enfichable) et puis un choix entre l'objet moqueur ou faux mais la qualité des données de test de DB.

+0

+1 pour Sql Gen données de Redgate; Je ne le savais pas avant. Merci! – pencilCake

2

Votre meilleur pari est de se pencher sur les frameworks d'injection et de simulation de dépendances. De cette façon, vous pouvez échanger des fournisseurs de données avec des fournisseurs de données simulés et utiliser les données qui correspondent à vos besoins pour le test spécifique.

Si vous utilisez NHibernate ou similaire, vous pouvez toujours recréer votre schéma db avant chaque test (appareil).

1

Dans une situation comme celle que vous décrivez, je préférerais créer le compte dans la fonction de test. Un test unitaire doit être aussi autonome que possible. En outre, il est utile de comprendre ce que vous testez, si vous pouvez voir toutes les données requises pour le test en un seul endroit.

Voici un exemple tout à fait composé qui devrait illustrer:

[Test] 
public void Test_CannotCreateDuplicateEmail() 
{ 
    // Arrange 
    CreateAccount("[email protected]"); // OK 

    // Act 
    try 
    { 
     CreateAccount("[email protected]"); 

     // If control arrives here, then the test has failed. 
     Assert.Fail(); 
    } 

    // Assert 
    catch(AccountException ex) 
    { 
     // Assert that the correct exception has been thrown. 
     Assert.AreEqual("Failed", ex.Message); 
    } 
}