2010-08-30 6 views
2

Je suis nouveau pour les tests unitaires. Je veux faire quelque chose comme suit:Test unitaire n'atteignant pas un code

[Test] 
[ExpectedException(ExceptionType = typeof(Exception))] 
public void TestDeleteCategoryAssociatedToTest() 
{ 
    Category category = CategoryHelper.Create("category", Project1); 
    User user; 
    Test test1 = IssueHelper.Create(Project1, "summary1", "description1", user); 
    test1.Category = category; 
    category.Delete(user);   
    Assert.IsNotNull(Category.Load(category.ID)); 
    Assert.IsNotNull(Test.Load(test1.ID).Category); 
} 

Mon but ici est de tester que la catégorie n'a pas été supprimé en faisant le Assert.IsNotNull() ... mais comme il est de jeter l'exception, il est ne pas atteindre ce morceau de code. Une idée de comment je peux améliorer le test ci-dessus?

En fait, dans mon API j'fous une exception dans le cas où la catégorie est associée à un test ... Mon extrait est:

IList<Test> tests= Test.LoadForCategory(this); 
if (tests.Count > 0) 
{ 
    throw new Exception("Category '" + this.Name + "' could not be deleted because it has items assigned to it."); 
} 
else 
{ 
    base.Delete(); 
    foreach (Test test in tests) 
    { 
     test.Category = null; 
    } 
} 
+0

essayez-vous de supprimer la catégorie? Je ne suis pas capable de comprendre le flux de votre code. qu'est-ce que category.Delete (user) faire? est-ce là où est le problème? – Rahul

+0

Je pense qu'il essaie de vérifier que l'exception de suppression n'a pas été lancée de façon non-régulière – BitKFu

Répondre

9

Essayez et tester une seule fonctionnalité par test. IOW écrit des tests de réussite et d'échec séparés.

1

Vous pouvez faire quelque chose comme:

[Test] 
public void TestDeleteCategoryAssociatedToTest() 
{ 
    // Arrange 
    Category category = CategoryHelper.Create("category", Project1); 
    User user; 
    Test test1 = IssueHelper.Create(Project1, "summary1", "description1", user); 
    test1.Category = category; 

    try 
    { 
     // Act 
     category.Delete(user); 

     // Assert  
     Assert.Fail("The Delete method did not throw an exception."); 
    } 
    catch 
    { 
     Assert.IsNotNull(Category.Load(category.ID)); 
     Assert.IsNotNull(Test.Load(test1.ID).Category); 
    } 
} 

Le Assert.Fail() indique que le test unitaire doit échouer, si aucune exception a été levée. En cas d'exception, vous pouvez effectuer d'autres vérifications, comme illustré ci-dessus.

Questions connexes