Слайд 2Что такое Unit Testing
Unit Testing - тестирование модулей приложения с помощью программных
процедур.
Обычно Unit Tests пишутся разработчиками, и являются первым уровнем тестирования приложения.
Позволяют выявлять проблемы в незаконченных модулях на стадии разработки.
Можно рассматривать как средство документирования кода.
Слайд 3Что тестировать?
Код должен быть относительно простым
Не иметь большого числа зависимостей
Обладать необходимым интерфейсом
для тестирования
Входные и выходные данные должны быть стабильными и легко воспроизводимыми
Слайд 4Когда тестировать?
Есть два подхода:
Написание Unit Tests предшествует написанию кода
Создание тестов после окончания
реализации функциональности
Слайд 6Пример теста
#include "UnitTest++\UnitTest++.h"
#include "..\FeatureExtractionCore\SharedLinks.h"
#include "..\FeatureExtractionCore\BoundCalculator.h"
using namespace SightPower::XGIP::Plugins::FeatureExtractionCore;
TEST(BoundTest1)
{
Vertices points;
points.push_back(Vertex( 2.4, 5.6, -2.06));
points.push_back(Vertex( 3.67,
7.8, 0.8));
points.push_back(Vertex(-1.5, -2.9, 4.5));
points.push_back(Vertex(-0.6, -7.6, -0.12));
Bound b;
ComputeBound(b, points.begin(), points.end(), [&](const Vertex&)->bool{return true;});
CHECK_EQUAL(-1.5, b.X);
CHECK_EQUAL(-7.6, b.Y);
CHECK_EQUAL(-2.06, b.Z);
CHECK_EQUAL(3.67, b.FX);
CHECK_EQUAL(7.8, b.FY);
CHECK_EQUAL(4.5, b.FZ);
}
Слайд 7UnitTest++
Виды тестов
Простой тест
TEST(YourTestName)
{
}
Тест с состоянием - Fixture
struct SomeFixture
{
SomeFixture() { /*
some setup */ }
~SomeFixture() { /* some teardown */ }
int testData;
};
TEST_FIXTURE(SomeFixture, YourTestName)
{
int temp = testData;
}
Слайд 8UnitTest++
Макросы проверки
CHECK(false);
CHECK_EQUAL(10, 20);
CHECK_CLOSE(3.14, 3.1415, 0.01)
CHECK_THROW(throw TestException(), TestException);
UNITTEST_TIME_CONSTRAINT(50);
Слайд 9Вывод результатов
Вывод результатов тестирования в Visual Studio:
Tests.vcxproj -> q:\XGIP\Platform\SightPower.XGIP.Plugins.FeatureExtractionTests.exe
EigenTest.cpp(63): error : Failure
in EigenTest: Expected 0.5 +/- 1e-005 but was 0.423481
PlaneTest.cpp(38): error : Failure in PlaneTest3: Expected 78.3 +/- 0.0001 but was 4.3
FAILURE: 2 out of 11 tests failed (2 failures).
Test time: 0.66 seconds.
Слайд 10Преимущества использования
Unit Testing
Выявление проблем на стадии разработки
Создание атомарного малосвязанного кода
Выявление проблем
связанных с зависимостями
Автоматический Regression Testing