kid-programmer
@kid-programmer

TDD, много Assert`ов

Всем здрасте, вопрос: в книгах и статьях в интернете по TDD говорят, что нужно начинать с асcертов и желательно с одного и писать на один тест как можно меньше. Уменя такой пример, разрабатываю класс, который выдает даты исходя из заданных параметров (еженедельное расписание). По TDD начинаю с написание теста и с аcсерта на вывод нужных дат.

//Assert 
            Assert.AreEqual(result[0].Start, DateTime.Parse("04.12.13 08:00:00"));
            Assert.AreEqual(result[0].Finish, DateTime.Parse("06.12.13 00:00:00"));

            Assert.AreEqual(result[1].Start, DateTime.Parse("11.12.13 08:00:00"));
            Assert.AreEqual(result[1].Finish, DateTime.Parse("13.12.13 00:00:00"));
               
           //..... итд еще 100500 асcертов на два месяца


Подскажите, пожалуйста, что-то не так или все нормально? Как правильно вообще подойти к этой задаче, с чего правильнее начать?
  • Вопрос задан
  • 2701 просмотр
Решения вопроса 1
xakpc
@xakpc
full-stack .net developer, CEO Leecero.com
Используйте входящие параметры
Пример с использованием NUnit'а
[TestCase(0, "04.12.13 08:00:00", "06.12.13 00:00:00")]
[TestCase(1, "04.12.13 08:00:00", "06.12.13 00:00:00")]
public void Test123(int i, DateTime s, DateTime e)
{
     Assert.That(result[i].Start, Is.EqualTo(DateTime.Parse(s)));
     Assert.That(result[i].Finish,Is.EqualTo( DateTime.Parse(e)));                 
}


* поправил пример чтобы он действительно был из NUnit
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
обычно данные организуют в массив, обходят его и ассертят. увы с юнит тестированием в .NET не знаком. Но если вас смущает именно большое количество ассертов - то в этом нету ничего страшного. Вы можете потом отрефакторить ваши тесты что бы они не делали лишних ассертов.
Ответ написан
Комментировать
@Gilga
Разработать и тестировать каждой одной функции. Вызывать 100500 раз одной функции ничего не дают результата.

Предполагаю у вас метод на входе какой-то даты и какой-то параметр, на выходе получаем дату, по-логически, не должна раньше, чем исходной даты.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы