Вы можете скомпилировать встроенное программное обеспечение в Visual Studio. Создание заглушек для конкретной функциональности платформы, а также для особенностей Green Hills, если таковые имеются. Также остерегайтесь любых специфических макросов Green Hills. Вам нужно будет найти или создать эквиваленты.
Я использую CppUnit в Visual Studio 2008 с wxWidgets. Я не пытался интегрировать CppUnit с Visual Studio 2010 отдельно.
Имейте в виду, что вы хотите сохранить код проверки отдельно от встроенного кода. Встроенный код должен быть импортирован в ваш проект проверки в виде библиотеки и заголовочных файлов. Это делает тестирование честным (хотя я понимаю, что вы не сможете связать библиотеку Green Hills с библиотекой Visual Studio). В противном случае создайте встроенный код, используя VS, но в качестве отдельной библиотеки на этапе сборки.
Разработайте тестирование в соответствии с требованиями к программному обеспечению, если это возможно. После этого разработайте некоторый код для осуществления общедоступных функций. Помните, что разработчик не должен писать код для выполнения тестирования, а тестирующие не должны писать код для выполнения функций разработчика. «Если он существует, проверь его». или «Если это используется, проверьте это». Например, платформа может иметь контроллер DMA, но не использовать его.
Редактировать # 1 - Пример
С учетом следующего класса во «встроенном» или реализации:
class Title
{
public:
Title();
Title(const Title& rc);
virtual ~Title();
Title& operator= (const Title& rt);
const std::string& get_table_name(void) const;
const std::string& get_title_text(void) const;
void set_table_name(const std::string&);
void set_title_text(const std::string& new_text);
};
Класс тестирования CppUnit будет выглядеть так:
#include "cppunit/extensions/HelperMacros.h"
class Test_Ing_Title
: public CPPUNIT_NS::TestFixture
{
//---------------------------------------------------------------------
// Friends
//---------------------------------------------------------------------
CPPUNIT_TEST_SUITE(Test_Ing_Title);
CPPUNIT_TEST(ing_name_field_testing);
CPPUNIT_TEST(copying);
CPPUNIT_TEST(table_name_testing);
CPPUNIT_TEST(test_id_field);
CPPUNIT_TEST(title_testing);
CPPUNIT_TEST(visitor_test);
CPPUNIT_TEST_SUITE_END();
//---------------------------------------------------------------------
// Public types
//---------------------------------------------------------------------
public:
//---------------------------------------------------------------------
// Public Constructors and Destructors
//---------------------------------------------------------------------
public:
//! Constructor - Default
Test_Ing_Title();
//! Copy Constructor
Test_Ing_Title(const Test_Ing_Title& n_obj);
//! Destructor
virtual ~Test_Ing_Title();
//---------------------------------------------------------------------
// Public Overloaded Operators
//---------------------------------------------------------------------
public:
//---------------------------------------------------------------------
// Public Methods
//---------------------------------------------------------------------
public:
//! Test cloning of the title record.
void cloning(void);
//! Test copying
void copying(void);
//! Test the name field getters and setters
void ing_name_field_testing(void);
//! Test the table name getters & setters
void table_name_testing(void);
void tearDown(void);
//! Test the ID field getters and setters.
void test_id_field(void);
//! Test the title getters and setters
void title_testing(void);
//! Test visitors to the title.
void visitor_test(void);
};
Пример метода тестирования:
#include <stdafx.h> // This line is required for precompiled headers on MSVC++.
#include <cppunit/TestCase.h>
#include <cppunit/extensions/HelperMacros.h>
#include <string>
void
Test_Ing_Title ::
title_testing(void)
{
static const char expected_title_text[] = "Ground Beef";
const std::string expected_title(expected_title_text);
std::string actual_title;
Ingredient::Records::Title ing_title;
ing_title.set_title_text(expected_title);
actual_title = ing_title.get_title_text();
CPPUNIT_ASSERT(actual_title == expected_title);
return;
}
В приведенном выше примере тестовый класс создает экземпляр класса для тестирования, а затем выполняет методы. Ключевым моментом является то, что тестовый класс изолирован от системы или, другими словами, тестовый класс не влияет на тестируемую систему. Размещение тестового кода в отдельном месте поможет подчеркнуть эту концепцию. Считайте «встроенный» код доступным только для чтения. Испытайте себя до крайности, оставайтесь на своем, уменьшенное количество возвратов продукции будет вашей наградой (и увеличит прибыль компании).
НТН.