Простые или более сложные тесты? - PullRequest
1 голос
/ 07 марта 2012

Начал изучать TDD и столкнулся с некоторыми недоразумениями о различных подходах к написанию тестов.

В некоторых статьях говорится, что вы должны написать новый тест для каждого случая.Таким образом, может быть два или более тестов для одного метода.

Другой подход, который я видел, заключается в написании более сложных тестов в несколько этапов.Например: написать тест -> ошибка -> написать код -> успех -> изменить текущий тест (добавить новые утверждения) -> ошибка -> написать код -> успех -> и так далее.После выполнения этих шагов тест охватывает всю логику одного метода.

Каковы плюсы и минусы этого подхода использования TDD?

1 Ответ

4 голосов
/ 07 марта 2012

"проще" просто добавить кучу утверждений в существующий тестовый пример, потому что вам не нужно создавать новые тестовые наборы (и придумывать для них имена), но я бы предпочел написать меньшие тесты, которые более конкретны. Основным преимуществом является то, что у вас будет больше информации, если / когда тест не пройден, о том, что пошло не так.

Посмотрим, смогу ли я придумать надуманный пример:

[Fact]
public void TestEverything()
{
    var foo = new Foo();
    Assert.Equal(42, foo.TheAnswer);
    Assert.Equal(string.Empty, foo.Log);
    foo.DoSomething();
    Assert.Equal("something was done", foo.Log);
}


[Fact]
public void TheAnswer_AfterCreation_ShouldAdhereToTheHitchhikersGuide()
{
    var foo = new Foo();
    Assert.Equal(42, foo.TheAnswer);
}

[Fact]
public void Log_AfterCreation_ShouldBeEmpty()
{
    var foo = new Foo();
    Assert.Equal(string.Empty, foo.Log);
}

[Fact]
public void Log_DoSomething_ShouldLogSomething()
{
    var foo = new Foo();
    foo.DoSomething();
    Assert.Equal("something was done", foo.Log);
}

Как видите, придумать хорошие имена для методов тестирования очень сложно (а я плохо выполнил задание, особенно для последнего), но просто представить, что произойдет, если TheAnswer_AfterCreation_ShouldAdhereToTheHitchhikersGuide не удастся: вы получите довольно хорошее описание от ваш тестовый жгут вместо информации о том, что TestEverything не удался (Задача: попробуйте найти более подходящее название для него ;-))

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