Примеры C#. DataGenerator. Первые тесты

Поделиться
HTML-код
  • Опубликовано: 24 фев 2016
  • Ответы на вопросы, правила написания юнит-тестов.
    Поддержи развитие канала! money.yandex.ru/to/4100139057...
    Qiwi Wallet +79534684569
    Группа ВКонтакте: easycomp

Комментарии • 32

  • @pavelkogtev2651
    @pavelkogtev2651 7 лет назад +2

    Спасибо, благодаря урокам внедрил тестирование в свой проект.

  • @ProLegionTD
    @ProLegionTD 5 лет назад

    Автор GrandMaster) уважение

  • @Zermond
    @Zermond 4 года назад +5

    Автор, вернись обратно! Не хватает нового контента от тебя!

  • @Inquisitor_ss
    @Inquisitor_ss 8 лет назад +1

    Добрый день и спасибо за очередной потрясающий урок.
    У меня возникли вопросы:
    1. Я так и не понял зачем нам нужен именно Unit test. Почему я не могу подключить отдельный проект скажем консольный, подключить необходимые пространства имен для работы и написать обыкновенные методы в которых буду и реализовать ARRANGE ACT ASSERT. а после выводить результаты теста в консоль.
    2. Что таит под собой атрибут [Test] и почему им надо помечать метод если в нем и так записана вся логика от объявления до вызова тестируемого метода и проверки.
    3. Почему надо имя класса заканчивать на слово Test это как-то влияет на компилятор ? Как скажем у контроллеров в MVC ?

    • @Defazze
      @Defazze  8 лет назад +2

      +Sargis Lefty Sanoyan
      1. Можно и отдельный консольный проект, но через NUnit удобнее. Сам по себе NUnit ничего не делает, а только предоставляет удобную среду для запуска тестовых методов
      2. Атрибут [Test] как раз и показывает среде NUnit, что данный метод - тестовый. Если атрибут не указать, то NUnit метод не увидит и запустить его через NUnit не получится.
      3. Заканчивать тестовые классы на Test - это общепринятое соглашение, никак на компилятор не влияет. Влияют только атрибуты, как я уже говорил.

  • @pavelpisotskyi834
    @pavelpisotskyi834 8 лет назад

    А может еще добавите проект на Github или в TFS? заодно можно покрыть тему систем контроля версий

  • @user-pp4ev7wu8u
    @user-pp4ev7wu8u 8 лет назад

    Увлекательно и познавательно как всегда!!!
    Особо радует, что Вы добрались до реальных примеров. Пока один вопрос: обязательно ли отделять слой данных от бизнес логики или это желательно, или это выбор только для данного примера и ничего страшного нет в том, что слой данных знает про/умеет создавать экземпляры типов бизнес логики?
    Еще, если это возможно, хотелось бы, чтобы Вы сделали акцент на применении статических классов. В первую очередь где это во благо, а также где это зло вопиющее и ошибка новичка.
    Спасибо.

    • @Defazze
      @Defazze  8 лет назад +1

      +Сергей Ф Ну как сказать, конечно, Вселенная не взорвется, если слой данных будет обращаться к бизнес-логике ) И программа будет работать. Но с точки зрения классического подхода это категорически неверно. А дальше уже Вы сами решаете, как Вам строить архитектуру своего приложения )

    • @user-pp4ev7wu8u
      @user-pp4ev7wu8u 8 лет назад

      Спасибо за ответ!

  • @detnhyiiika6759
    @detnhyiiika6759 2 года назад

    3:29 - а можно делегировать =).

  • @user-er7xq2gw5f
    @user-er7xq2gw5f 6 лет назад

    После введения TestFixture в поле using не добавляется NUnit.Framework. Нужно подключить вручную?

  • @sergepikovsky3385
    @sergepikovsky3385 8 лет назад

    Кстати, тем, кто захочет воспроизвести код, у меня была проблема такого рода с NUnit: не поддерживалась 3-я версия NUnit Resharper-ом Ultimate 2015.2 . Пока не поставил версию 10.2 ничего не прыгало. Пробовал 3 других варианта (с устаревшей графической оболочкой, с NUnit Test Adapter [тут какой-то результат вроде намечался, но я не дожал, т.к. то что я мог все таки получить меня не вдохновило] и дагунгрейдом NUnity до 2.6). Так что проверяйте версию ReSharper!

  • @user-fh9lq3sb3e
    @user-fh9lq3sb3e 8 лет назад

    Поставил NUnit Test Adapter, но не знаю как его использовать в студии. Таким образом не могу запустить юнит-тесты. Кто-нибудь может подсказать как это сделать ?

  • @user-hc8sp7ty9x
    @user-hc8sp7ty9x 8 лет назад

    Спасибо вам за уроки!
    Наверноe мой вопрос будет немного не по теме, скорее это относится к рефакторингу.
    Тестовый метод:
    public void GenerateUser_NameRequired()
    {
    UserEntity entity = _generator.GenerateUser();
    string name = entity.Name;
    Assert.That(name, Is.Not.Empty);
    }
    Почему вы пишете именно так, а не например:
    string name = _generator.GenerateUser().Name;
    или сразу
    Assert.That(_generator.GenerateUser().Name, Is.Not.Empty);
    так лаконично и, в принципе, тоже понятно.
    Есть какие то рекомендации или "правила хорошего тона" при написании кодa?

    • @Defazze
      @Defazze  8 лет назад +1

      +Анжей Ковальски На мой взгляд, вариант в уроке куда читаемее, чем Assert.That(_generator.GenerateUser().Name, Is.Not.Empty); И еще одна причина: во время отладки можно сразу увидеть все переменные: entity со всеми полями, name в окне отладки Locals. Ведь юнит-тесты, помимо непосредственно тестирования, удобно использовать и для отладки.

    • @user-hc8sp7ty9x
      @user-hc8sp7ty9x 8 лет назад

      +Программирование - это просто Понятно, спасибо.

  • @vladimirezh
    @vladimirezh 7 лет назад

    Мне одному кажется, интерфейс IScriptGenerator замешал в себя две задачи? Задача первая- генерировать данные, т.е. poco, которые заполнены данными. Задача вторая- из данных, которые подаются ему на вход генерировать скрипт. Т.е. если у меня меняется скрипт, его формат, то это никак не должно влиять на генерацию данных. И наоборот. Я интерфейс разбил на две части.

  • @ReasonX3
    @ReasonX3 8 лет назад

    Спасибо за урок!
    Вопрос. Вы говорили, что один класс должен делать одну задачу. Класс, в котором хранятся данные, должен иметь только поля для данных без логики.
    Но, что если поля данных жорстко зависят друг от друга? То есть, изменение одного поля, влечет немедленное изменение остальных полей. Может произойти ситуация, когда кто-то из разработчиков, начнет обращаться к классу хранения данных напрямую, игнорируя класс управления этими данными, и, естественно, рискует нарушить логику приложения.
    Имеет ли смысл в этом случае писать setter-ы с нужной логикой прямо внутри класса хранения данных?
    Надеюсь не сильно вас запутал. Еще раз, спасибо!

    • @Defazze
      @Defazze  8 лет назад

      +ReasonX7 Любое изменение внутреннего состояния класса при обращении к его методам должно быть как-то задекларировано. Либо именем метода, либо XML-комментарием к методу, либо (что хуже) некоей сторонней справкой. Тогда логика будет прозрачна.

    • @ReasonX3
      @ReasonX3 8 лет назад

      +Программирование - это просто В комментариях к сеттерам записано, как это повлияет на внутреннее состояние класса. Как я понял, в данном случае, такую практику можно считать нормальной?

    • @Defazze
      @Defazze  8 лет назад +1

      +ReasonX7 В принципе да, но если сеттер серьезно влияет на поведение, то я бы использовал лучше явный метод, что-то типа Set...(). Но это сугубо мое личное мнение )

    • @ReasonX3
      @ReasonX3 8 лет назад

      +Программирование - это просто Методы так и называются. setNameOfField(data) { ... }
      Спасибо, за оперативные ответы!

  • @jaguarsea
    @jaguarsea 8 лет назад

    Если у кого получилось с NUnit Test Adapter запустить тесты в VS, отпишитесь пожалуйста.

    • @jaguarsea
      @jaguarsea 8 лет назад +5

      Сам себе отвечу... Нужно просто поставить NUnit3 Test Adapter.

    • @Defazze
      @Defazze  8 лет назад

      +Егор Сухоруков Да, действительно, с NUnit3 Test Adapter всё работает, спасибо )

  • @jaguarsea
    @jaguarsea 8 лет назад +5

    Нет такого символа "Нижнее подчеркивание", в прочем как и верхнего... Символ "_" называется "Знак подчеркивания". Извините, но не смог не сказать об этом, очень режет слух.

    • @101afg101
      @101afg101 7 лет назад +9

      Сраные гуманитарии

  • @ChoosYourDestiy
    @ChoosYourDestiy 8 лет назад

    вам случайно ученик не нужен собственный?)