SlideShare a Scribd company logo
Unit тестирование
*Модульное тестирование, или юнит-
тестирование (англ. unit testing) — процесс
в программировании, позволяющий проверить на
корректность отдельные модули исходного кода
программы.
*Идея состоит в том, чтобы писать тесты для каждой
нетривиальной функции или метода. Это позволяет
достаточно быстро проверить, не привело ли очередное
изменение кода к регрессии, то есть к появлению ошибок
в уже оттестированных местах программы, а также
облегчает обнаружение и устранение таких ошибок.
Цель - изолировать отдельные части
программы и показать, что по отдельности
эти части работоспособны.
*Этот тип тестирования обычно выполняется
программистами!
1. Поощрение изменений.
Модульное тестирование позже позволяет
программистам проводить рефакторинг, будучи
уверенными, что модуль по-прежнему работает
корректно (регрессионное тестирование). Это
поощряет программистов к изменениям кода,
поскольку достаточно легко проверить, что код
работает и после изменений.
2. Упрощение интеграции
Модульное тестирование помогает устранить
сомнения по поводу отдельных модулей и может
быть использовано для подхода к тестированию
«снизу вверх»: сначала тестируются отдельные
части программы, затем программа в целом.
3. Документирование кода
Модульные тесты можно рассматривать как «живой
документ» для тестируемого класса. Клиенты,
которые не знают, как использовать данный класс,
могут использовать юнит-тест в качестве примера.
4. Отделение интерфейса от реализации
Поскольку некоторые классы могут использовать
другие классы, тестирование отдельного класса
часто распространяется на связанные с ним. Это
приводит к менее связанному коду, минимизируя
зависимости в системе.
Unit тестирование
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

PPT
Введение в язык программирования «Java»
PDF
Spring puzzlers
PDF
Statis code analysis
PDF
Unit testing iOS Applications
PDF
Spring Boot Test horror
PDF
Автоматическая генерация тестов по комментариям к программному коду
PPT
Сетевое взаимодействие
PDF
Архитектура. Доступноять программных систем.
Введение в язык программирования «Java»
Spring puzzlers
Statis code analysis
Unit testing iOS Applications
Spring Boot Test horror
Автоматическая генерация тестов по комментариям к программному коду
Сетевое взаимодействие
Архитектура. Доступноять программных систем.

What's hot (15)

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

Viewers also liked (18)

PPT
Where to Eat in Manhattan: The Mermaid Inn
PPT
Where to Eat in Toronto: Le Select Bistro
PPT
Where to Eat in Sarasota: The Usual Place
PPT
What is a Kitchen Incubator? Interview with Chef Greg Fatigati
PPT
Where to Eat in Southern Italy: Interview with Rosetta Costantino
PPTX
Apresentação3
PDF
PPTX
PPTX
PPT
PPTX
Presentacion power poitn adicciones 20 sep
PDF
Practica nª 7 tipos de grafico
PDF
Enenergia Eolica informe Tesis
DOC
Horario y voleta 4
PPTX
Democratización de la producción multimedia
PPTX
Hombro Rosario
PDF
DOCX
katies resume
Where to Eat in Manhattan: The Mermaid Inn
Where to Eat in Toronto: Le Select Bistro
Where to Eat in Sarasota: The Usual Place
What is a Kitchen Incubator? Interview with Chef Greg Fatigati
Where to Eat in Southern Italy: Interview with Rosetta Costantino
Apresentação3
Presentacion power poitn adicciones 20 sep
Practica nª 7 tipos de grafico
Enenergia Eolica informe Tesis
Horario y voleta 4
Democratización de la producción multimedia
Hombro Rosario
katies resume
Ad

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

PPTX
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
PDF
C# Desktop. Занятие 17.
PPT
Тестирование весна 2014 смешанное занятие 2
PPT
Unit Testing
PPTX
Unit тесты java
PDF
Александр Ярулин - Автоматизация тестирования с xUnit
PDF
Евгений Сафронов "Тестирование. точка зрения разработчика"
PDF
50 оттенков красного
PDF
2015-03-07 03 Сергей Александрович. 50 оттенков красного
PDF
Javascript testing
PDF
Антипаттерны модульного тестирования (Донецкий кофе-и-код Сентябрь 2010)
PPTX
Unit tests Python examples
PPT
JavaTalks.Unit Testing.Part 1
PPTX
Автоматизация.pptx
PPT
ClubQA #2. Unit testing and TDD
PPT
Unit testing and TDD
PPTX
Continious integration-Automated Testing-Solid-Agile
PPT
Unit testing
PPTX
Автотесты и образ мышления
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
C# Desktop. Занятие 17.
Тестирование весна 2014 смешанное занятие 2
Unit Testing
Unit тесты java
Александр Ярулин - Автоматизация тестирования с xUnit
Евгений Сафронов "Тестирование. точка зрения разработчика"
50 оттенков красного
2015-03-07 03 Сергей Александрович. 50 оттенков красного
Javascript testing
Антипаттерны модульного тестирования (Донецкий кофе-и-код Сентябрь 2010)
Unit tests Python examples
JavaTalks.Unit Testing.Part 1
Автоматизация.pptx
ClubQA #2. Unit testing and TDD
Unit testing and TDD
Continious integration-Automated Testing-Solid-Agile
Unit testing
Автотесты и образ мышления

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

  • 2. *Модульное тестирование, или юнит- тестирование (англ. unit testing) — процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы. *Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.
  • 3. Цель - изолировать отдельные части программы и показать, что по отдельности эти части работоспособны. *Этот тип тестирования обычно выполняется программистами!
  • 4. 1. Поощрение изменений. Модульное тестирование позже позволяет программистам проводить рефакторинг, будучи уверенными, что модуль по-прежнему работает корректно (регрессионное тестирование). Это поощряет программистов к изменениям кода, поскольку достаточно легко проверить, что код работает и после изменений.
  • 5. 2. Упрощение интеграции Модульное тестирование помогает устранить сомнения по поводу отдельных модулей и может быть использовано для подхода к тестированию «снизу вверх»: сначала тестируются отдельные части программы, затем программа в целом.
  • 6. 3. Документирование кода Модульные тесты можно рассматривать как «живой документ» для тестируемого класса. Клиенты, которые не знают, как использовать данный класс, могут использовать юнит-тест в качестве примера.
  • 7. 4. Отделение интерфейса от реализации Поскольку некоторые классы могут использовать другие классы, тестирование отдельного класса часто распространяется на связанные с ним. Это приводит к менее связанному коду, минимизируя зависимости в системе.
  • 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; } }); });