Курсы по программированию

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

Новые технологии / Модульное тестирование

  • На этом уроке мы познакомимся с модульным тестированием.
    Мы напишем небольшой калькулятор, в который добавим
    проект для модульного тестирования, и покажем,
    как это всё работает, как это нужно использовать.
  • Дата отправки отчёта: 22 декабря 2015 г.
  • Задание выполнено: за 2 час. 35 мин.
  • Чему научился: Использование модульного тестирования в C#.
  • Что было сложным: Реализация своего класса знаковых чисел MyInteger с управляемым диапазоном значений.
  • Комментарии: Сначала сделал все как на уроке, опробовал работу всех тестов, включая последний, с исключением деления на ноль. Понравилось. Решил добавить что-то от себя. Так как в данном уроке мы пишем калькулятор и в чате упомянули о случае, если мы выйдем за границы диапазона long, то решил создать свой велосипед. Разработал класс MyInteger, который представляет знаковое целое число с управляемым ограниченным диапазоном значений. Ограничение указывается во втором параметре конструктора - это количество битов в разрядной сетке числа. Первый параметр - само число. Например, new MyInteger(5, 4) означает, что мы имеем дело с числом, значение которого 15 и число битов 4, поэтому максимальное положительное число - 2^3 - 1 = 7, соответственно отрицательное -2^3 = -8. Оба параметра имеют значения по умолчанию, то есть MyInteger(value = 0, bits = 64) и можно написать new MyInteger(5), и получим обычное число в типе long. Данное решение мне не очень нравится, в C++ я бы для этого применил шаблоны, где выход за границы проверяется на этапе компиляции и код получается безопаснее. Здесь же в C# я пока что слабо владею языком, поэтому выбрал такое решение, где ограничение на диапазон не привязано к типу на этапе компиляции и поэтому проверяется во время выполнения.

    Создал свои три типа исключений InvalidBitCount (bits < 1 || bits > 64), BitCountMismatch (в операциях сложения и т.д. могут участвовать только числа с количеством бит в разрядной сетке. Если не одинаково - ловим эксепшн), ValueOverflow (если вышли за пределы значений числа, например, при операции умножения получили слишком большое число). Кроме того, для удобства и на примере C++ добавил перегрузку операторов +, *. /, чтобы писать конструкции c = a + b. Удобно.

    Добавил 16 тестов, где рассматриваются разные варианты возникновения исключений. Названия старался выбирать говорящие, так что думаю понятно, что делает тот или иной тест. Например это тесты на проверку валидности создаваемого числа, переполнения в положительном/отрицательном диапазонах, несовместимостях двух чисел по разрядным сеткам(например пытаться сложить тип int с типом short).
    В общем, на этом все, опять получилась большая стена текста, спасибо что дочитали)

    Спасибо, Евгений Витольдович, хороший урок)
  • Оценка видео-уроку:
Отчёт от 7276 за Новые технологии / Модульное тестирование


Отчёт от 7276 за Новые технологии / Модульное тестирование




Оцени работу

 
Сохранить страницу:


Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Научился создавать проект для модульного тестирования. Писать простые юнит-тесты для своего класса и его методов.
Что-то интересное и новое, хотя, я полагаю, написание юнит-тестов - довольно рутинная работа...


Научился: Создавать прoeкт для модyльнoго теcтирoвaния, писать тестовые функции и тесты с обязательным исключением.
Отличный урок!) Очень полезный для тестирования созданных проектов!