Модульный тест не достигает части кода - PullRequest
2 голосов
/ 30 августа 2010

Я новичок в модульном тестировании.Я хочу сделать что-то следующим образом:

[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);
}

Моя цель здесь состоит в том, чтобы проверить, что категория не была удалена с помощью Assert.IsNotNull() ... но, поскольку она выдает исключение, она не достигаеткусок кода.Есть идеи, как мне улучшить тест?

На самом деле в моем API я выбрасываю исключение, если категория связана с тестом ... Мой фрагмент:

 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;
     }
 }

Ответы [ 2 ]

9 голосов
/ 30 августа 2010

Попробуйте и протестируйте только одну функциональность на тест. Я пишу отдельные тесты на успех и провал.

1 голос
/ 30 августа 2010

Вы можете сделать что-то вроде:

[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);
    }
}

Assert.Fail () сообщает, что модульный тест завершится неудачей, если не было выдано исключение В случае исключения вы можете выполнить другие проверки, как показано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...