После прочтения книг по TDD и внедрения этой методики в мои проекты на C#, я решил разобраться как с этим дела обстоят в Visual С++. Тем более, что для тестирования математических расчетов я пользовался ручкой и бумагой, что было очень утомительно и трудозатратно. Посмотрев материалы по тестированию кода на MSDN, мой выбор пал на Google test framework из-за нескольких причин:
- простота установки;
- интуитивно понятный язык написания тестов.
- качаем последнюю версию framework-ка;
- затем в свойствах проекта добавляем include path:
- после этого добавляем строчку _VARIADIC_MAX=10 в определения препроцессора, это необходимо сделать из-за особенностей Visual Studio 12 и выше:
- компилируем проект, если все без ошибок, тогда переходим к следующему шагу;
- добавляем непосредственно проект теста (обычное консольное приложение);
- затем в свойствах проекта добавляем include path(только в отличие от аналогичного шага в проекте googleTest тут мы еще добавляем папку с тестируемым проектом):
- после этого добавляем строчку _VARIADIC_MAX=10 в определения препроцессора (полностью все аналогично проекту googleTest );
- добавляем ссылки на два наших проекта:
- все, теперь можно писать тесты:
#include "gtest/gtest.h"
#include "Date_Time.h"
#include "Date_Time.cpp"
#include "Atmosphera.h"
#include "Atmosphera.cpp"
#include "OrbitElements.h"
#include "OrbitElements.cpp"
#include "Vector.h"
#include "Vector.cpp"
#include "Spacecraft.h"
#include "Spacecraft.cpp"
#include "Soyuz.h"
#include "Soyuz.cpp"
class TestVector : public ::testing::Test
{
protected:
void SetUp()
{
Vector::f = 110;
Vector::ap = 16;
Date_Time DataTime(2011,10,05);
vect = new Vector(1816, 70500, -4887.4796260, -1988.8661830, 4242.4879740,
-0.536599240, -6.3971388400, -3.612259210, 0.04158185, DataTime);
soyuz = new Soyuz(*vect, 6746.0, 1158.0, 2886.0, 300.0, 302.0,
115.20, 0, 0.385080, -0.036830, 0.0, 0.008234, 49.40, 273.00, 200, 6, 1, 2);
}
void TearDown()
{
delete vect;
delete soyuz;
}
Vector* vect;
Soyuz* soyuz;
};
TEST_F(TestVector, z_eq_zero)
{
vect->Prognoz((unsigned int)1817);
double z = vect->operator[](3);
ASSERT_NEAR(0, z, 0.001)<< "=========================================";
}
TEST_F(TestVector, soyuz_prognoz_success)
{
soyuz->Prognoz((unsigned int) 1817);
SUCCEED();
}
int maint (int argc, char *argv[])
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Результат:
Более подробно про синтаксис Google test framework написано в этой статье: http://habrahabr.ru/post/119090/
Комментариев нет:
Отправить комментарий