Модульное тестирование Visual Studio C ++ (неуправляемое)

Я устанавливаю набор модульных тестов для некоторого неуправляемого кода C ++, и у меня есть несколько вопросов.

Я добавил проект в свое решение с Visual C++TestNative Unit Test Project,

Создание собственного тестового проекта

Чтобы выяснить, как все сгруппировано в этой тестовой среде и когда выполняется инициализация, я заменил содержимое исходного файла (unittest1.cpp) с измененной версией USAGE EXAMPLE с вершины CppUnitTest.h:

#include <CppUnitTest.h>
#include <string>

using namespace Microsoft::VisualStudio::CppUnitTestFramework;
using std::string;

BEGIN_TEST_MODULE_ATTRIBUTE()
TEST_MODULE_ATTRIBUTE(L"Date", L"2010/6/12")
END_TEST_MODULE_ATTRIBUTE()static string Indent("");

void openBlock()
{
Logger::WriteMessage((Indent + "{").c_str());
Indent += "  ";
}

void closeBlock()
{
Indent.resize(Indent.size() >= 2 ? (Indent.size() - 2) : 0);
Logger::WriteMessage((Indent + "}").c_str());
}TEST_MODULE_INITIALIZE(ModuleInitialize)
{
Logger::WriteMessage((Indent + "In Module Initialize").c_str());
openBlock();
}

TEST_MODULE_CLEANUP(ModuleCleanup)
{
closeBlock();
Logger::WriteMessage((Indent + "In Module Cleanup").c_str());
}TEST_CLASS(Class1)
{
public:
Class1()
{
Logger::WriteMessage((Indent + "In Class1").c_str());
openBlock();
}
~Class1()
{
closeBlock();
Logger::WriteMessage((Indent + "In ~Class1").c_str());
}TEST_CLASS_INITIALIZE(ClassInitialize)
{
Logger::WriteMessage((Indent + "In Class Initialize").c_str());
openBlock();
}
TEST_CLASS_CLEANUP(ClassCleanup)
{
closeBlock();
Logger::WriteMessage((Indent + "In Class Cleanup").c_str());
}BEGIN_TEST_METHOD_ATTRIBUTE(Method1)
TEST_OWNER(L"OwnerName")
TEST_PRIORITY(1)
END_TEST_METHOD_ATTRIBUTE()

TEST_METHOD(Method1)
{
Logger::WriteMessage((Indent + "In Method1").c_str());
Assert::AreEqual(0, 0);
}

TEST_METHOD(Method2)
{
Logger::WriteMessage((Indent + "In Method2").c_str());
Assert::Fail(L"Fail");
Logger::WriteMessage("This won't print due to failure above.");
}
};

Он генерирует вывод ниже. (Я добавил некоторые разрывы строк для ясности.)

In Module Initialize
{

In Class Initialize
{

In Class1
{
In Method1
}
In ~Class1

In Class1
{
In Method2
}
In ~Class1

}
In Class Cleanup

}
In Module Cleanup

Из этого я делаю вывод:

  • каждый TEST_MODULE содержит ноль или более TEST_CLASSэс.
  • каждый TEST_CLASS содержит ноль или более TEST_METHODs.
  • TEST_MODULE_INITIALIZE() а также TEST_MODULE_CLEANUP() запускаются один раз для каждого TEST_MODULEдо / после своей серии TEST_CLASSони выполнены.
  • TEST_CLASS_INITIALIZE() а также TEST_CLASS_CLEANUP() запускаются один раз для каждого TEST_CLASSдо / после своей серии TEST_METHODs выполнены.
  • каждый TEST_METHOD является примером TEST_CLASS, Конструктор класса выполняется непосредственно перед TEST_METHOD()и деструктор класса выполняется сразу после TEST_METHOD(),
  1. Верны ли мои выводы превыше всего? Я пропустил что-нибудь важное?
  2. Должен / должен ли я всегда иметь один и только один TEST_MODULE на исходный файл? Может TEST_MODULE быть разделены между несколькими исходными файлами? Что такое лучшая практика?
  3. Могу ли я иметь более одного TEST_CLASS за файл или TEST_MODULE? Есть ли лучшие практики в этом отношении?
  4. Какова цель ATTRIBUTEs? Как они используются?
  5. Как называется этот модуль модульного тестирования? Какие условия поиска я могу использовать, чтобы узнать больше?

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]