Презентация unit testing lecture v2

Скачать презентацию  unit testing lecture v2 Скачать презентацию unit testing lecture v2

unit_testing_lecture_v2.ppt

  • Размер: 392.5 Кб
  • Количество слайдов: 22

Описание презентации Презентация unit testing lecture v2 по слайдам

Модульное тестирование с помощью библиотеки  NUnit Модульное тестирование с помощью библиотеки NUnit

Содержание Мифы о тестировании Модульное тестирование с помощью  NUnit Рекомендации к написанию тестов Полезная информацияСодержание Мифы о тестировании Модульное тестирование с помощью NUnit Рекомендации к написанию тестов Полезная информация о C#

Введение Что такое модульное тестирование?  Тестирование отдельных функций системы.  Как правило выполняется разработчиком модуля.Введение Что такое модульное тестирование? Тестирование отдельных функций системы. Как правило выполняется разработчиком модуля. Может быть легко автоматизировано. Закладывает основу для регрессионного тестирования приложения.

Мифы о тестировании  «У меня нет времени на тесты» .  «Тестирование – скучное иМифы о тестировании «У меня нет времени на тесты» . «Тестирование – скучное и не творческое занятие» . «Мой код и так отлично работает» . «Это работа для отдела тестирования. У них получится лучше» .

Миф № 1 «У меня нет времени на тесты» Мало тестов Больше времени на отладку НедостатокМиф № 1 «У меня нет времени на тесты» Мало тестов Больше времени на отладку Недостаток времени Нестабильный код Больше ошибок. Написание тестов стабилизирует код и позволяет существенно сократить время отладки.

Пример программы Пусть есть класс, реализующий математические  функции. public class Calculator {  public staticПример программы Пусть есть класс, реализующий математические функции. public class Calculator { public static int S um(int x, int y){ return x+y; //возвращает результат сложения двух чисел } }

Вариант модульного тестирования № 1 Некоторые проверки можно поместить в сам класс. public class Calculator {Вариант модульного тестирования № 1 Некоторые проверки можно поместить в сам класс. public class Calculator { public static void main(String[] args) { if ( S um(1, 3) == 4) { //проверяем, что при сложении 1 и 3 //нам возвращается 4 Console. Write. Line («Test 1 passed. «); } else { Console. Write. Line («Test 1 failed. «); } }

Наблюдени я Тесты неудобно хранить в самой программе.  Выход - внешняя библиотека, подключенная к проектуНаблюдени я Тесты неудобно хранить в самой программе. Выход — внешняя библиотека, подключенная к проекту Часто используемые библиотеки модульного тестирования : NUnit, CUnit, JUnit, …

Библиотека Nunit Библиотека Nunit

using System; using NUnit. Framework; [Test. Fixture] public class Largest. Test { [Test] public void Largest.using System; using NUnit. Framework; [Test. Fixture] public class Largest. Test { [Test] public void Largest. Of. Number() { Assert. Greater(2, 1); } }Пример тестового класса

T естовый проект Как правило, имя_тестируемого_проекта +  Test“ ( н - р Calculator. Test. dll)T естовый проект Как правило, имя_тестируемого_проекта + » Test“ ( н — р Calculator. Test. dll) Тот же солюшен, что и тестируемый проект Разметка атрибутами NUnit Test. Fixture. Set. Up Test Tear. Down Test. Fixture. Tear. Down

Атрибуты NUnit Атрибут Значение Test тестовый метод Test. Fixture атрибут класса, содержащего тесты Test. Fixture. Set.Атрибуты NUnit Атрибут Значение Test тестовый метод Test. Fixture атрибут класса, содержащего тесты Test. Fixture. Set. Up функция, выполняющаяся один раз при создании класса помеченного Test. Fixture Set. Up функция, выполняющаяся перед каждым тестом Tear. Down функция, выполняющаяся после исполнения каждого теста Test. Fixture. Tear. Down функция, выполняющаяся один раз при удалении класса помеченного Test. Fixture Ignore временное отключение теста Expected. Exception ожидаемый тип исключения для проверки «некорректных» данных

Проверка условий (Assert) Класс Assert. Are. Equal – эквивалентны ли 2 параметра метода (пожалуй, самый популярныйПроверка условий (Assert) Класс Assert. Are. Equal – эквивалентны ли 2 параметра метода (пожалуй, самый популярный ассёрт) Is. True (Is. False) – является ли выражение истинным (ложным) Is. Null (Is. Not. Null) – является ли п a раметр null Contains – для коллекций и некоторые другие, которые редко имеет смысл использовать

Использование NUnit // подключение библиотеки  using NUnit. Framework; //Тест должен быть помечен атрибутом [Test. Fixture]Использование NUnit // подключение библиотеки using NUnit. Framework; //Тест должен быть помечен атрибутом [Test. Fixture] public class Calculator Test { //тестирующие методы помечены атрибутом [Test] и начинаются с префикса “Test” [Test] public void T est. Sum() { int x = 3 ; int y = 5 ; int exp. Result = 8 ; int result = Calculator. S um(x, y); //проверка условия на совпадение A ssert. Are Equal(exp. Result, result); //A ssert. Are Equals( Calculator. S um( 3 , 5 ) ) ; }

Причины ошибки тестов Неправильно работает тестируемый метод.  Методы, вызываемые из тестируемого,  генерируют исключение поПричины ошибки тестов Неправильно работает тестируемый метод. Методы, вызываемые из тестируемого, генерируют исключение по каким-то причинам. Некорректно написан тест.

Рекомендации к написанию тестов Название тестового метода.  Размер теста.  Ожидаемый результат.  Тестовые данные.Рекомендации к написанию тестов Название тестового метода. Размер теста. Ожидаемый результат. Тестовые данные.

Название тестового метода Имя теста должно описывать:  Тестируемую функциональность.  Возможно, условия тестирования.  НепонятноНазвание тестового метода Имя теста должно описывать: Тестируемую функциональность. Возможно, условия тестирования. Непонятно Понятно Test 1 Test. Add. User. Throw. Exception Test. Add. User. Without. Password

Размер теста Тестовый метод должен быть коротким.  Дополнительные проверки -  вспомогательные методы.  КоличествоРазмер теста Тестовый метод должен быть коротким. Дополнительные проверки — > вспомогательные методы. Количество проверок (assert) должно быть минимальным. Иначе сложно будет найти причину ошибки. Каждый тест — одна единица бизнес-логики: Простой метод. Один из исходов конструкции if. . else. Один из случаев ( case ) блока switch. Исключение, обрабатываемое блоком try…catch Исключение, генерируемое (throw) в методе.

Ожидаемый результат public void T est. Balance 1() { Account account = new A ccount(); account.Ожидаемый результат public void T est. Balance 1() { Account account = new A ccount(); account. D eposit ( 10 ) ; account. W ithdraw ( 5 ) ; account. D eposit(6); int expected. Balance = 11; //правильно A ssert. Are. Equal ( expected. Balance , account. Balance); } public void T est. Balance 2() { Account account = new Account(); account. D eposit(10); account. W ithdraw(5); account. D eposit(6); int expected. Balance = 10 — 5 + 6; //неправильно A ssert. Are. Equal ( expected. Balance , account. Balance); } Ожидаемый результат должен быть константой. Не следует в тесте повторять тестируемую логику, подсчитывая результат.

Тестовые данные public void T est. Is. Password. Valid() { A ssert. Is. True (user. IТестовые данные public void T est. Is. Password. Valid() { A ssert. Is. True (user. I s. Password. Valid(«abcdef»)); //понять, правильно ли написан тест, можно лишь отыскав где создается объект user A ssert. Is False(user. I s. Password. Valid(«123456»)); } Тестовые данные и ожидаемый результат должны быть рядом. Если объект user удобнее создавать вне тестового метода, следует использовать именованные константы.

Тестовые данные ( cont. ) public void T est. Is. Password. Valid() {   Тестовые данные ( cont. ) public void T est. Is. Password. Valid() { User user = new User(«Name», «abcdef»); A ssert. Is. True (user. I s. Password. Valid(«abcdef»)); //здесь все понятно A ssert. Is. False (user. I s. Password. Valid(«123456»)); } public void T est. Is. Password. Valid() { A ssert. Is. True (user. I s. Password. Valid( valid. Password )) ; //здесь тоже A ssert. Is False(user. I s. Password. Valid( wrong. Password )); }

Вопросы? Вопросы?