Автоматизоване тестування
Тестування
• Тестування – процес пошуку дефектів
• Тестування не може довести відсутності
  дефектів
  – Лише їх наявність
• В будь-якій програмі є дефекти
• Краще знаходити дефекти раніше, ніж
  пізніше
Тестування
• Відбувається разом із розробкою
• Спосіб: запускаємо і дивимось чи працює
• Створюємо допоміжні засоби
  – Консольні програми
  – Допоміжний UI
Testing Framework
Призначення:
• Виконання тестів
• API для написання тестів
• Автоматизація
• Перегляд результатів
C++ Testing Frameworks
• googletest + googlemock
  https://code.google.com/p/googletest/
  https://code.google.com/p/googlemock/

• Boost.Test
  http://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

• Others
  http://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 folder
http://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"                          Descriptive name

BOOST_AUTO_TEST_CASE(AddTwoPositiveIntegersReturnsCorrectResult)
{                         Set up System Under Test
    Math math;                    (Arrange)
                                          Call System Under Test
    auto result = math.add(1, 2);                   (Act)
    BOOST_REQUIRE_EQUAL(3, result);
                                                   Assert
}



                            Unit test
Модульний тест (unit test)
Показує, що модуль працює правильно
Тестує лише логіку (add)
Не тестує взаємодію з БД, файлами, мережею
Виконується в пам’яті
Тестує лише один клас/метод
Короткий і читабельний
Не містить циклів та умов
Повторюваний, не залежить від послідовності
Assertions
BOOST_REQUIRE(true);
BOOST_REQUIRE_EQUAL_COLLECTIONS(begin(), end(),
     begin(), end());
BOOST_REQUIRE_GE(4, 3); // 4 >= 3
BOOST_REQUIRE_GT(4, 3); // 4 > 3
BOOST_REQUIRE_LE(3, 4); // 3 <= 4
BOOST_REQUIRE_LT(3, 4); // 3 < 4
BOOST_REQUIRE_NE(3, 4); // 3 != 4
BOOST_FAIL("Failure");

cpp-2013 #16 Automated testing

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