После прочтения книг по 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/
Комментариев нет:
Отправить комментарий