Developers want to make very few errors in their code and to spot them as early as possible: with the help of unit tests, or earlier, during compilation, or best of all, immediately after they typed something wrong in their IDE. This is what static code analyzers are for. Some of them are built-in, others need to be run separately, some check just about any code, the others require it to be annotated first, and there are tools that are a little bit of all. Do the ends justify the means? Is it even worth trying? What kind of errors can be spotted by static code analysis? How sure can we be if what an analyzer gives us is a real error or a false positive? This talk hopefully helps you answer these questions.
Обсудим что нового в Spring Boot Test 1.4.0+
В программе:
* Старые подходы
** @ContextConfiguration
** @ContextHierarchy && @DirtiesContext
** @ActiveProfiles
* Что нового нам приготовил Spring Boot?
** @SpringBootTest
** @TestConfiguration
** @MockBean && @SpyBean && @*Beans
** @DataJpaTest
** @WebMvcTest
* Кэширование spring контекстов
* Шкала тестов
Слайды с доклада "Проклятие Spring Boot Test"
Developers want to make very few errors in their code and to spot them as early as possible: with the help of unit tests, or earlier, during compilation, or best of all, immediately after they typed something wrong in their IDE. This is what static code analyzers are for. Some of them are built-in, others need to be run separately, some check just about any code, the others require it to be annotated first, and there are tools that are a little bit of all. Do the ends justify the means? Is it even worth trying? What kind of errors can be spotted by static code analysis? How sure can we be if what an analyzer gives us is a real error or a false positive? This talk hopefully helps you answer these questions.
Обсудим что нового в Spring Boot Test 1.4.0+
В программе:
* Старые подходы
** @ContextConfiguration
** @ContextHierarchy && @DirtiesContext
** @ActiveProfiles
* Что нового нам приготовил Spring Boot?
** @SpringBootTest
** @TestConfiguration
** @MockBean && @SpyBean && @*Beans
** @DataJpaTest
** @WebMvcTest
* Кэширование spring контекстов
* Шкала тестов
Слайды с доклада "Проклятие Spring Boot Test"
Многие из нас слышали, что при создании тестовых систем необходимо понимать из каких слоев они должны состоять. Но начинающим специалистам очень сложно четко понять за чем эти слои нужны и какие функции они выполняют. В своем докладе я хотел бы внести ясность по данному вопросу и ответить на все все вопросы.
Where to Eat in Manhattan: The Mermaid InnTaste Trekkers
http://tastetrekkers.com/podcast -- Marisa Olsen of Les Foodites recommends The Mermaid Inn in New York City, where Chef Adam Alderin serves up seafood dishes.
We discuss The New York Times‘ infamous review of Guy Fieri’s Times Square restaurant, the difference between east coast and west coast oysters, and the finer points of Dim Sum dining.
http://tastetrekkers.com/podcast -- Viviana Machado of Foodies Inked recommends Le Select Bistro in toronto, where Chef Albert Ponzo serves up French dishes like Beef Cheeks and Duck Confit. We discuss bone marrow and Tim Hortons’ Dubai invasion.
http://tastetrekkers.com/podcast -- Laura Raymond of Destination Cuisine recommends The Usual Place in Sarasota, where Chef Chef Alessio serves up Italian dishes like Pork Shank. We discuss tightrope walkers, the plural of “octopus,” and the virtues of a cucumber cocktail.
What is a Kitchen Incubator? Interview with Chef Greg FatigatiTaste Trekkers
http://tastetrekkers.com/episode-60 -- http://tastetrekkers.com/episode-60 -- Chef Greg Fatigati of Fatigati's Fresh Pasta talks about the Hope & Main kitchen incubator in Warren, Rhode Island.
We discuss pasta, the Food Network and the origin of tomatoes.
Where to Eat in Southern Italy: Interview with Rosetta CostantinoTaste Trekkers
http://tastetrekkers.com/episode-65 -- Rosetta Costantino, author of Southern Italian Desserts, talks about the dishes of her hometown of Calabria, Italy. We discuss the Queen’s licorice, the difference between Tuscan dishes and Southern Italian dishes, and the influence of the Swiss and the Arabs.
Многие из нас слышали, что при создании тестовых систем необходимо понимать из каких слоев они должны состоять. Но начинающим специалистам очень сложно четко понять за чем эти слои нужны и какие функции они выполняют. В своем докладе я хотел бы внести ясность по данному вопросу и ответить на все все вопросы.
Where to Eat in Manhattan: The Mermaid InnTaste Trekkers
http://tastetrekkers.com/podcast -- Marisa Olsen of Les Foodites recommends The Mermaid Inn in New York City, where Chef Adam Alderin serves up seafood dishes.
We discuss The New York Times‘ infamous review of Guy Fieri’s Times Square restaurant, the difference between east coast and west coast oysters, and the finer points of Dim Sum dining.
http://tastetrekkers.com/podcast -- Viviana Machado of Foodies Inked recommends Le Select Bistro in toronto, where Chef Albert Ponzo serves up French dishes like Beef Cheeks and Duck Confit. We discuss bone marrow and Tim Hortons’ Dubai invasion.
http://tastetrekkers.com/podcast -- Laura Raymond of Destination Cuisine recommends The Usual Place in Sarasota, where Chef Chef Alessio serves up Italian dishes like Pork Shank. We discuss tightrope walkers, the plural of “octopus,” and the virtues of a cucumber cocktail.
What is a Kitchen Incubator? Interview with Chef Greg FatigatiTaste Trekkers
http://tastetrekkers.com/episode-60 -- http://tastetrekkers.com/episode-60 -- Chef Greg Fatigati of Fatigati's Fresh Pasta talks about the Hope & Main kitchen incubator in Warren, Rhode Island.
We discuss pasta, the Food Network and the origin of tomatoes.
Where to Eat in Southern Italy: Interview with Rosetta CostantinoTaste Trekkers
http://tastetrekkers.com/episode-65 -- Rosetta Costantino, author of Southern Italian Desserts, talks about the dishes of her hometown of Calabria, Italy. We discuss the Queen’s licorice, the difference between Tuscan dishes and Southern Italian dishes, and the influence of the Swiss and the Arabs.
Особенности тестирования Spring Boot приложения. Нововведения с версии spring-boot 1.4.+
В программе:
* Старые подходы
** @ContextConfiguration
** @ContextHierarchy && @DirtiesContext
** @ActiveProfiles
* Что нового нам приготовил Spring Boot?
** @SpringBootTest
** @TestConfiguration
** @SpringBootConfiguration и его связь с @SpringBootApplicatoin
** @MockBean && @SpyBean && @*Beans
** @DataJpaTest
** @WebMvcTest
* Кэширование spring контекстов
* Шкала тестов
* Порядок сканирвоания контекста test+main. Подводные камни этого процесса
Слайды с доклада "Проклятие Spring Boot Test"
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61
Вячеслав Марков, QA engineer в Weezlabs
Я расскажу о том, как в нашей фирме организовано тестирование бэкенда с помощью тестового фреймворка TestNG и Java. Расскажу о data-driven тестировании и о том, почему его удобно применять. Покажу и опишу разработанную нами структуру типового тестового проекта. Представлю применяемые нами способы сбора и документирования результатов, а так же их анализ в условиях CI.
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
Как-то так происходит, что “на 10 девчонок по статистике 9 ребят”, а точнее на группу из 5-7 разработчиков – 1 тестировщик. Или его нет совсем. Так что очень часто приходится и код писать, и тестировать, а дата релиза все ближе и ближе.
В тех случаях, когда мы пишем веб-приложение, помочь в нашей нелегкой судьбе может бодрящий микс из Selenium и TestNG... Как это сделали мы, какие потом получили выводы и результаты — все это я и хочу рассказать и показать
Практические основы тестирования на php Unit-test: понятия, тонкости, пути решения, вопросы для проработки.
PHPUnittest fast start
Разработано http://webgloss.ru
Automation Functional Testing in Agile ProjectsAndrey Rebrov
Об автоматических тестах писал ещё Сам Кент Бек. Ну, а автоматические функциональные тесты — это вообще лакомый кусок для современных agile методик разработки ПО. Вместе с участниками кемпа мы узнаем, с какой стороны подходить к процессу автоматизации тестирования в целом. Кроме того, мы создадим проект автотестирования с использованием одного из самых популярных продуктов для тестирования веб-приложений — Selenium 2.
Solit 2014, EcmaScript 6 in Action, Трухин Юрий solit
Юрий Трухин, Россия. Эксперт по облачным технологиям хостинговой компании InfoboxCloud. В прошлом – обладатель статуса Microsoft Most Valuable Professional. Гик, стратег, разработчик. Подробнее на trukhin.com
«Обзор InfoboxCloud для разработчиков». Development секция. Высокий уровень подготовки. Для разработчиков.
В этом докладе будет рассказано об устройстве InfoboxCloud из первых рук, о деталях внутренней реализации, о том, какую пользу несет облако для разработчиков и о будущем InfoboxCloud. Будут рассмотрены 2 кита облачных технологий: IaaS и PaaS без vendor-lock. Отличная возможность спросить обо всём, что касается PaaS/IaaS непосредственно архитектора и разработчика этих систем.
«EcmaScript 6 in Action». Development секция. Для разработчиков.
Поговорим о том, как жизнь разработчиков изменится с приходом нового стандарта.
"Опыт создания системы управления сборкой и тестированием" (полная)SPB SQA Group
Доклад посвящен вопросам создания и использования собственной системы управления процессами сборки и тестирования ПО. Описываются ключевые моменты построения таких систем, в частности: вопросы интерфейсов, быстродействия, качества и интеграции в общую инфраструктуру. Затрагиваются концепции встраивания качества в код, сбора и использования метрик ПО, неотделимости сборки от тестирования, автоматизированного ведения базы знаний об ошибках и другие.
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...it-people
Большинство примеров тестов в книгах, семинарах и презентациях упрощены настолько, что их невозможно применить в реальных проектах. Из-за такого упрощения, сначала получаешь заряд мотивации, но столкнувшись с суровой действительностью быстро бросаешь написание тестов. Мы решили исправить этот пробел, показав тестирование на реальных примерах из нашей практики. Мы расскажем о тестировании баз данных, сетевых взаимодействий и веб-форм. Также расскажем об инструментах, которые мы используем для тестирования.
Разработка через тестирование в 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;
}
});
});