SlideShare a Scribd company logo
*Модульное тестирование, или юнит-
тестирование (англ. unit testing) — процесс
в программировании, позволяющий проверить на
корректность отдельные модули исходного кода
программы.
*Идея состоит в том, чтобы писать тесты для каждой
нетривиальной функции или метода. Это позволяет
достаточно быстро проверить, не привело ли очередное
изменение кода к регрессии, то есть к появлению ошибок
в уже оттестированных местах программы, а также
облегчает обнаружение и устранение таких ошибок.
Цель - изолировать отдельные части
программы и показать, что по отдельности
эти части работоспособны.
*Этот тип тестирования обычно выполняется
программистами!
1. Поощрение изменений.
Модульное тестирование позже позволяет
программистам проводить рефакторинг, будучи
уверенными, что модуль по-прежнему работает
корректно (регрессионное тестирование). Это
поощряет программистов к изменениям кода,
поскольку достаточно легко проверить, что код
работает и после изменений.
2. Упрощение интеграции
Модульное тестирование помогает устранить
сомнения по поводу отдельных модулей и может
быть использовано для подхода к тестированию
«снизу вверх»: сначала тестируются отдельные
части программы, затем программа в целом.
3. Документирование кода
Модульные тесты можно рассматривать как «живой
документ» для тестируемого класса. Клиенты,
которые не знают, как использовать данный класс,
могут использовать юнит-тест в качестве примера.
4. Отделение интерфейса от реализации
Поскольку некоторые классы могут использовать
другие классы, тестирование отдельного класса
часто распространяется на связанные с ним. Это
приводит к менее связанному коду, минимизируя
зависимости в системе.
1. Написать функциюклассметоды класса.
2. Подготовить входные данные.
3. Запустить его.
4. Проверить, что он работает и делает то, что необходимо.
5. Повторить пункты 2-4 с другими входными данными
Unit-тест – это пункты 2-4, записанные в специальном формате
Unit-тест – это пункты 2-4, записанные в специальном формате
----------------------------------------------------------------
describe Something do
it "should do what i want it to do" do
@something = Something.new
@something.do_something.should == what_i_expect
end
it "should do something else" do
et_cetera
end
end
Где скачать?
https://github.com/pivotal/jasmine/downloads
Быстрый старт
http://pivotal.github.com/jasmine/
Примеры + видео
http://railscasts.com/episodes/261-testing-javascript-
with-jasmine
Набор тестов начинается с вызова глобальной
Jasmine функции describe c двумя
параметрами:
*строка
*функция
Строка – имя или название специфического набора
тестов – обычно что происходит внутри набора
тестов
Функция – блок кода, реализующего набор тестов
Спецификации определяются вызовом глобальной
Jasmine функции it c двумя параметрами:
*строка
*функция
Строка –название текущей спецификации (теста)
Функция – блок кода, реализующего сам тест
------------------------------------------------------------------------
describe("A suite", function() {
it("contains spec with an expectation",
function() { expect(true).toBe(true);
});
});
Спецификация (тест) содержит одно или более
ожиданий, которые проверяют состояние
тестируемого кода.
Ожидание в Jasmine – утверждение, которое может
принимать значение «истина» или «ложь».
Спецификации со всеми истинными утверждениями
проходят спецификацию. Спецификация с хотя бы
одним ложным утверждением не проходит
спецификацию
Т.к. describe и it блоки – функции, они могут
содержать любой исполняемый код, необходимый
для реализации теста.
Переменные объявленные в describe доступны в
любом блоке it внутри набора тестов
Значение, которое принимает Ожидание
изменяется с помощью функции Matcher
(вычислитель)
Каждый matcher реализует логическое сравнение
текущего и ожидаемого значений Ожидания.
Эта функция передает Jasmine истинно или ложно
Ожидание. В результате чего Jasmine определяет
выполнилась ли вся спецификация
*expect(x).toEqual(y); сравнивает объекты x и y и возвращает
«истину», если они эквиваленты
*expect(x).toBe(y); сравнивает объекты x и y и возвращает
«истину», если они являются одним и тем же объектом
*expect(x).toMatch(pattern); сравнивает объекты или регулярные
выражения x и y и возвращает «истину», если они
соответствующие
*expect(x).toBeDefined(); возвращает «истину», если объект
определен
*expect(x).toBeUndefined(); возвращает «истину», если объект не
определен
*expect(x).toBeNull(); возвращает «истину», если объект null
*expect(x).toBeTruthy(); возвращает «истину», если объект –
«истина»
*expect(x).toBeFalsy(); возвращает «истину», если объект –
«ложь»
*expect(x).toContain(y); возвращает «истину», если массив или
строка х содержит у
*expect(x).toBeLessThan(y); возвращает «истину», если объект x –
меньше объекта y
*expect(x).toBeGreaterThan(y); возвращает «истину», если
объект x – больше объекта y
*expect(function(){fn();}).toThrow(e); возвращает «истину», если
функция не заходит в исключение e
Каждая функция matcher может быть инвертирована
использованием .not
expect(x).not.toEqual(y);
Создание новых спецификаций позволяет лучше документировать
спецификации, и избежать дублирование кода в спецификациях.
Matcher-функция получает актуальное значение this.actual, и
нуль или больше переменных могут подаваться при вызове
функции.
Функция возвращает «истина» если актуальное значение
соответствует требованиям matcher-функции, и «ложь» иначе
Определение функции toBeLessThan()
--------------------------------------------------------
toBeLessThan: function(expected) {
return this.actual < expected;
};
---------------------------------------------------------
Чтобы добавить функцию-matcher в набор вызываем
this.addMatchers()
--------------------------------------------------------------
beforeEach(function() {
this.addMatchers({
toBeLessThan: function(expected) {
return this.actual < expected;
}
});
});
Добавляем сообщение this.message
--------------------------------------------------------
beforeEach(function() {
this.addMatchers({
toBeLessThan: function(expected) {
var actual = this.actual;
var notText = this.isNot ? " not" : "";
this.message = function () {
return "Expected " + actual + notText + " to be less than " +
expected;
}
return actual < expected;
}
});
});

More Related Content

What's hot

Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
Technopark
 
Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with Selenium
Sergey Shvets
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в java
Unguryan Vitaliy
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
akrakovetsky
 
iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)Yandex
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
Technopark
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
Dima Dzuba
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программированияguestfc8ae0
 
Rambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOSRambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOS
RAMBLER&Co
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7
Technopark
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Noveo
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFSergey Nemchinsky
 
Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?
COMAQA.BY
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.
Igor Shkulipa
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
Technopark
 

What's hot (15)

Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with Selenium
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в java
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
 
iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 
Rambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOSRambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOS
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
 
Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 

Viewers also liked

Where to Eat in Manhattan: The Mermaid Inn
Where to Eat in Manhattan: The Mermaid InnWhere to Eat in Manhattan: The Mermaid Inn
Where to Eat in Manhattan: The Mermaid Inn
Taste Trekkers
 
Where to Eat in Toronto: Le Select Bistro
Where to Eat in Toronto: Le Select BistroWhere to Eat in Toronto: Le Select Bistro
Where to Eat in Toronto: Le Select Bistro
Taste Trekkers
 
Where to Eat in Sarasota: The Usual Place
Where to Eat in Sarasota: The Usual PlaceWhere to Eat in Sarasota: The Usual Place
Where to Eat in Sarasota: The Usual Place
Taste Trekkers
 
What is a Kitchen Incubator? Interview with Chef Greg Fatigati
What is a Kitchen Incubator? Interview with Chef Greg FatigatiWhat is a Kitchen Incubator? Interview with Chef Greg Fatigati
What is a Kitchen Incubator? Interview with Chef Greg Fatigati
Taste Trekkers
 
Where to Eat in Southern Italy: Interview with Rosetta Costantino
Where to Eat in Southern Italy: Interview with Rosetta CostantinoWhere to Eat in Southern Italy: Interview with Rosetta Costantino
Where to Eat in Southern Italy: Interview with Rosetta Costantino
Taste Trekkers
 
Presentacion power poitn adicciones 20 sep
Presentacion power poitn adicciones 20 sepPresentacion power poitn adicciones 20 sep
Presentacion power poitn adicciones 20 sepMandy Vazquez Hdez
 
Practica nª 7 tipos de grafico
Practica nª 7 tipos de graficoPractica nª 7 tipos de grafico
Practica nª 7 tipos de graficojanelixan
 
Enenergia Eolica informe Tesis
Enenergia Eolica informe Tesis Enenergia Eolica informe Tesis
Enenergia Eolica informe Tesis
ines micaela santana
 
Horario y voleta 4
Horario y voleta 4Horario y voleta 4
Horario y voleta 4justinonava
 
Democratización de la producción multimedia
Democratización de la producción multimediaDemocratización de la producción multimedia
Democratización de la producción multimedia
hayenuma
 
Hombro Rosario
Hombro RosarioHombro Rosario
Hombro Rosario
Vico Qm
 
05 auri
05 auri05 auri

Viewers also liked (18)

Where to Eat in Manhattan: The Mermaid Inn
Where to Eat in Manhattan: The Mermaid InnWhere to Eat in Manhattan: The Mermaid Inn
Where to Eat in Manhattan: The Mermaid Inn
 
Where to Eat in Toronto: Le Select Bistro
Where to Eat in Toronto: Le Select BistroWhere to Eat in Toronto: Le Select Bistro
Where to Eat in Toronto: Le Select Bistro
 
Where to Eat in Sarasota: The Usual Place
Where to Eat in Sarasota: The Usual PlaceWhere to Eat in Sarasota: The Usual Place
Where to Eat in Sarasota: The Usual Place
 
What is a Kitchen Incubator? Interview with Chef Greg Fatigati
What is a Kitchen Incubator? Interview with Chef Greg FatigatiWhat is a Kitchen Incubator? Interview with Chef Greg Fatigati
What is a Kitchen Incubator? Interview with Chef Greg Fatigati
 
Where to Eat in Southern Italy: Interview with Rosetta Costantino
Where to Eat in Southern Italy: Interview with Rosetta CostantinoWhere to Eat in Southern Italy: Interview with Rosetta Costantino
Where to Eat in Southern Italy: Interview with Rosetta Costantino
 
Apresentação3
Apresentação3Apresentação3
Apresentação3
 
N.6
N.6N.6
N.6
 
Aula 1
Aula 1Aula 1
Aula 1
 
Aula 5
Aula 5 Aula 5
Aula 5
 
Ii irespira
Ii irespiraIi irespira
Ii irespira
 
Presentacion power poitn adicciones 20 sep
Presentacion power poitn adicciones 20 sepPresentacion power poitn adicciones 20 sep
Presentacion power poitn adicciones 20 sep
 
Practica nª 7 tipos de grafico
Practica nª 7 tipos de graficoPractica nª 7 tipos de grafico
Practica nª 7 tipos de grafico
 
Enenergia Eolica informe Tesis
Enenergia Eolica informe Tesis Enenergia Eolica informe Tesis
Enenergia Eolica informe Tesis
 
Horario y voleta 4
Horario y voleta 4Horario y voleta 4
Horario y voleta 4
 
Democratización de la producción multimedia
Democratización de la producción multimediaDemocratización de la producción multimedia
Democratización de la producción multimedia
 
Hombro Rosario
Hombro RosarioHombro Rosario
Hombro Rosario
 
05 auri
05 auri05 auri
05 auri
 
katies resume
katies resumekaties resume
katies resume
 

Similar to Unit тестирование

07-testing.pdf
07-testing.pdf07-testing.pdf
Curse of spring boot test
Curse of spring boot testCurse of spring boot test
Curse of spring boot test
Кирилл Толкачёв
 
Unit тесты java
Unit тесты javaUnit тесты java
Unit тесты java
Vadim Lyakhovets
 
Victor Kuliamin.CSEDays
Victor Kuliamin.CSEDaysVictor Kuliamin.CSEDays
Victor Kuliamin.CSEDaysLiloSEA
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
IT61
 
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван ЗахарченкоSolit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченкоsolit
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Andrey Rebrov
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
Antonio
 
Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языка
Alexander Kucherenko
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Andrey Rebrov
 
C# Desktop. Занятие 17.
C# Desktop. Занятие 17.C# Desktop. Занятие 17.
C# Desktop. Занятие 17.
Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
Igor Shkulipa
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
Alexey Ivanov
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in action
Yuri Trukhin
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
solit
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)
SPB SQA Group
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoIlya Shalyapin
 
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
it-people
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconru
JetStyle
 

Similar to Unit тестирование (20)

07-testing.pdf
07-testing.pdf07-testing.pdf
07-testing.pdf
 
Curse of spring boot test
Curse of spring boot testCurse of spring boot test
Curse of spring boot test
 
Unit тесты java
Unit тесты javaUnit тесты java
Unit тесты java
 
Victor Kuliamin.CSEDays
Victor Kuliamin.CSEDaysVictor Kuliamin.CSEDays
Victor Kuliamin.CSEDays
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
 
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван ЗахарченкоSolit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языка
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
 
C# Desktop. Занятие 17.
C# Desktop. Занятие 17.C# Desktop. Занятие 17.
C# Desktop. Занятие 17.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in action
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и Django
 
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconru
 

Unit тестирование

  • 1.
  • 2. *Модульное тестирование, или юнит- тестирование (англ. unit testing) — процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы. *Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.
  • 3. Цель - изолировать отдельные части программы и показать, что по отдельности эти части работоспособны. *Этот тип тестирования обычно выполняется программистами!
  • 4. 1. Поощрение изменений. Модульное тестирование позже позволяет программистам проводить рефакторинг, будучи уверенными, что модуль по-прежнему работает корректно (регрессионное тестирование). Это поощряет программистов к изменениям кода, поскольку достаточно легко проверить, что код работает и после изменений.
  • 5. 2. Упрощение интеграции Модульное тестирование помогает устранить сомнения по поводу отдельных модулей и может быть использовано для подхода к тестированию «снизу вверх»: сначала тестируются отдельные части программы, затем программа в целом.
  • 6. 3. Документирование кода Модульные тесты можно рассматривать как «живой документ» для тестируемого класса. Клиенты, которые не знают, как использовать данный класс, могут использовать юнит-тест в качестве примера.
  • 7. 4. Отделение интерфейса от реализации Поскольку некоторые классы могут использовать другие классы, тестирование отдельного класса часто распространяется на связанные с ним. Это приводит к менее связанному коду, минимизируя зависимости в системе.
  • 8.
  • 9. 1. Написать функциюклассметоды класса. 2. Подготовить входные данные. 3. Запустить его. 4. Проверить, что он работает и делает то, что необходимо. 5. Повторить пункты 2-4 с другими входными данными Unit-тест – это пункты 2-4, записанные в специальном формате
  • 10. Unit-тест – это пункты 2-4, записанные в специальном формате ---------------------------------------------------------------- describe Something do it "should do what i want it to do" do @something = Something.new @something.do_something.should == what_i_expect end it "should do something else" do et_cetera end end
  • 12. Набор тестов начинается с вызова глобальной Jasmine функции describe c двумя параметрами: *строка *функция Строка – имя или название специфического набора тестов – обычно что происходит внутри набора тестов Функция – блок кода, реализующего набор тестов
  • 13. Спецификации определяются вызовом глобальной Jasmine функции it c двумя параметрами: *строка *функция Строка –название текущей спецификации (теста) Функция – блок кода, реализующего сам тест ------------------------------------------------------------------------ describe("A suite", function() { it("contains spec with an expectation", function() { expect(true).toBe(true); }); });
  • 14. Спецификация (тест) содержит одно или более ожиданий, которые проверяют состояние тестируемого кода. Ожидание в Jasmine – утверждение, которое может принимать значение «истина» или «ложь». Спецификации со всеми истинными утверждениями проходят спецификацию. Спецификация с хотя бы одним ложным утверждением не проходит спецификацию
  • 15. Т.к. describe и it блоки – функции, они могут содержать любой исполняемый код, необходимый для реализации теста. Переменные объявленные в describe доступны в любом блоке it внутри набора тестов Значение, которое принимает Ожидание изменяется с помощью функции Matcher (вычислитель)
  • 16. Каждый matcher реализует логическое сравнение текущего и ожидаемого значений Ожидания. Эта функция передает Jasmine истинно или ложно Ожидание. В результате чего Jasmine определяет выполнилась ли вся спецификация
  • 17. *expect(x).toEqual(y); сравнивает объекты x и y и возвращает «истину», если они эквиваленты *expect(x).toBe(y); сравнивает объекты x и y и возвращает «истину», если они являются одним и тем же объектом *expect(x).toMatch(pattern); сравнивает объекты или регулярные выражения x и y и возвращает «истину», если они соответствующие *expect(x).toBeDefined(); возвращает «истину», если объект определен *expect(x).toBeUndefined(); возвращает «истину», если объект не определен *expect(x).toBeNull(); возвращает «истину», если объект null *expect(x).toBeTruthy(); возвращает «истину», если объект – «истина»
  • 18. *expect(x).toBeFalsy(); возвращает «истину», если объект – «ложь» *expect(x).toContain(y); возвращает «истину», если массив или строка х содержит у *expect(x).toBeLessThan(y); возвращает «истину», если объект x – меньше объекта y *expect(x).toBeGreaterThan(y); возвращает «истину», если объект x – больше объекта y *expect(function(){fn();}).toThrow(e); возвращает «истину», если функция не заходит в исключение e Каждая функция matcher может быть инвертирована использованием .not expect(x).not.toEqual(y);
  • 19. Создание новых спецификаций позволяет лучше документировать спецификации, и избежать дублирование кода в спецификациях. Matcher-функция получает актуальное значение this.actual, и нуль или больше переменных могут подаваться при вызове функции. Функция возвращает «истина» если актуальное значение соответствует требованиям matcher-функции, и «ложь» иначе
  • 20. Определение функции toBeLessThan() -------------------------------------------------------- toBeLessThan: function(expected) { return this.actual < expected; }; --------------------------------------------------------- Чтобы добавить функцию-matcher в набор вызываем this.addMatchers() -------------------------------------------------------------- beforeEach(function() { this.addMatchers({ toBeLessThan: function(expected) { return this.actual < expected; } }); });
  • 21. Добавляем сообщение this.message -------------------------------------------------------- beforeEach(function() { this.addMatchers({ toBeLessThan: function(expected) { var actual = this.actual; var notText = this.isNot ? " not" : ""; this.message = function () { return "Expected " + actual + notText + " to be less than " + expected; } return actual < expected; } }); });