cpp-2013 #16 automated testing
TRANSCRIPT
Автоматизоване тестування
Тестування
• Тестування – процес пошуку дефектів
• Тестування не може довести відсутності дефектів
– Лише їх наявність
• В будь-якій програмі є дефекти
• Краще знаходити дефекти раніше, ніж пізніше
Тестування
• Відбувається разом із розробкою
• Спосіб: запускаємо і дивимось чи працює
• Створюємо допоміжні засоби
– Консольні програми
– Допоміжний UI
Testing Framework
Призначення:
• Виконання тестів
• API для написання тестів
• Автоматизація
• Перегляд результатів
C++ Testing Frameworks
• googletest + googlemockhttps://code.google.com/p/googletest/https://code.google.com/p/googlemock/
• Boost.Testhttp://www.boost.org/doc/libs/1_53_0/more/getting_started/http://www.boost.org/doc/libs/1_53_0/libs/test/doc/html/utf/testing-tools/reference.html
• Othershttp://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B
// offtopic
*.sdf file can grow large
Keep VS IntelliSense cache in %TEMP% instead of current solution folderhttp://stackoverflow.com/questions/7706984/visual-studio-2010-c-project-remove-sdf-file
Simple test#define BOOST_TEST_MODULE MathTests#include "boost/test/included/unit_test.hpp"#include "math.hpp"
BOOST_AUTO_TEST_CASE(AddTwoPositiveIntegersReturnsCorrectResult){
Math math;
auto result = math.add(1, 2);
BOOST_REQUIRE_EQUAL(3, result);}
Call System Under Test (Act)
Set up System Under Test (Arrange)
Descriptive name
Assert
Unit test
Модульний тест (unit test)
Показує, що модуль працює правильно
Тестує лише логіку (add)
Не тестує взаємодію з БД, файлами, мережею
Виконується в пам’яті
Тестує лише один клас/метод
Короткий і читабельний
Не містить циклів та умов
Повторюваний, не залежить від послідовності
Assertions
BOOST_REQUIRE(true);BOOST_REQUIRE_EQUAL_COLLECTIONS(begin(), end(),
begin(), end());BOOST_REQUIRE_GE(4, 3); // 4 >= 3BOOST_REQUIRE_GT(4, 3); // 4 > 3BOOST_REQUIRE_LE(3, 4); // 3 <= 4BOOST_REQUIRE_LT(3, 4); // 3 < 4BOOST_REQUIRE_NE(3, 4); // 3 != 4BOOST_FAIL("Failure");