Dokumentacja interfejsu API Microsoft.VisualStudio.TestTools.CppUnitTestFramework
W tym temacie wymieniono publicznych członków Microsoft::VisualStudio::CppUnitTestFramework
przestrzeni nazw. Użyj tych interfejsów API, aby napisać testy jednostkowe języka C++ na podstawie platformy Microsoft Native Unit Test Framework. Na końcu tematu znajduje się przykład użycia.
Pliki nagłówka i biblioteki znajdują się w <folderze> instalacyjnym programu Visual Studio\VC\Auxiliary\VS\UnitTest.
Ścieżki nagłówków i bibliotek są automatycznie konfigurowane w projekcie testowym natywnym.
W tym temacie
CppUnitTest.h
Tworzenie klas i metod testowych
TEST_CLASS(className)
Wymagane dla każdej klasy zawierającej metody testowe. Identyfikuje klasę className jako klasę testową. TEST_CLASS
należy zadeklarować w zakresie przestrzeni nazw.
TEST_METHOD(methodName)
{
// test method body
}
Definiuje metodę methodName jako metodę testową. TEST_METHOD
należy zadeklarować w zakresie klasy metody.
Inicjowanie i oczyszczanie
Metody testowania
TEST_METHOD_INITIALIZE(methodName)
{
// method initialization code
}
Definiuje methodName jako metodę uruchamianą przed uruchomieniem każdej metody testowej. TEST_METHOD_INITIALIZE
można zdefiniować tylko raz w klasie testowej i muszą być zdefiniowane w zakresie klasy testowej.
TEST_METHOD_CLEANUP(methodName)
{
// test method cleanup code
}
Definiuje methodName jako metodę uruchamianą po uruchomieniu każdej metody testowej. TEST_METHOD_CLEANUP
można zdefiniować tylko raz w klasie testowej i muszą być zdefiniowane w zakresie klasy testowej.
Klasy testowe
TEST_CLASS_INITIALIZE(methodName)
{
// test class initialization code
}
Definiuje methodName jako metodę uruchamianą przed utworzeniem każdej klasy testowej. TEST_CLASS_INITIALIZE
można zdefiniować tylko raz w klasie testowej i muszą być zdefiniowane w zakresie klasy testowej.
TEST_CLASS_CLEANUP(methodName)
{
// test class cleanup code
}
Definiuje methodName jako metodę uruchamianą po utworzeniu każdej klasy testowej. TEST_CLASS_CLEANUP
można zdefiniować tylko raz w klasie testowej i muszą być zdefiniowane w zakresie klasy testowej.
Moduły testowe
TEST_MODULE_INITIALIZE(methodName)
{
// module initialization code
}
Definiuje metodę methodName uruchamianą po załadowaniu modułu. TEST_MODULE_INITIALIZE
można zdefiniować tylko raz w module testowym i musi być zadeklarowany w zakresie przestrzeni nazw.
TEST_MODULE_CLEANUP(methodName)
Definiuje metodę methodName uruchamianą podczas zwalniania modułu. TEST_MODULE_CLEANUP
można zdefiniować tylko raz w module testowym i musi być zadeklarowany w zakresie przestrzeni nazw.
Tworzenie atrybutów testowych
Atrybuty metody testowej
BEGIN_TEST_METHOD_ATTRIBUTE(testMethodName)
TEST_METHOD_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_METHOD_ATTRIBUTE()
Dodaje atrybuty zdefiniowane za pomocą co najmniej jednego TEST_METHOD_ATTRIBUTE
makra do metody testowej testMethodName.
Makro TEST_METHOD_ATTRIBUTE
definiuje atrybut o nazwie attributeName i value attributeValue.
Atrybuty klasy testowej
BEGIN_TEST_CLASS_ATTRIBUTE(testClassName)
TEST_CLASS_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_CLASS_ATTRIBUTE()
Dodaje atrybuty zdefiniowane przy użyciu co najmniej jednego TEST_CLASS_ATTRIBUTE
makra do klasy testClassName.
Makro TEST_CLASS_ATTRIBUTE
definiuje atrybut o nazwie attributeName i value attributeValue.
Atrybuty modułu testowego
BEGIN_TEST_MODULE_ATTRIBUTE(testModuleName)
TEST_MODULE_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_MODULE_ATTRIBUTE()
Dodaje atrybuty zdefiniowane przy użyciu co najmniej jednego TEST_MODULE_ATTRIBUTE
makra do testowego modułu testModuleName.
Makro TEST_MODULE_ATTRIBUTE
definiuje atrybut o nazwie attributeName i value attributeValue.
Wstępnie zdefiniowane atrybuty
Te wstępnie zdefiniowane makra atrybutów są udostępniane jako wygoda w typowych przypadkach. Można je zastąpić makrem TEST_METHOD_ATTRIBUTE
opisanym powyżej.
TEST_OWNER(ownerAlias)
Definiuje element TEST_METHOD_ATTRIBUTE
o nazwie Owner
i wartości atrybutu ownerAlias.
TEST_DESCRIPTION(description)
Definiuje element TEST_METHOD_ATTRIBUTE
o nazwie Description
i wartości atrybutu opisu.
TEST_PRIORITY(priority)
Definiuje element TEST_METHOD_ATTRIBUTE
o nazwie Priority
i wartości atrybutu priorytetu.
TEST_WORKITEM(workitem)
Definiuje element TEST_METHOD_ATTRIBUTE
o nazwie WorkItem
i wartości atrybutu workItem.
TEST_IGNORE()
Definiuje element TEST_METHOD_ATTRIBUTE
o nazwie Ignore
i wartości atrybutu true
.
CppUnitTestAssert.h
Potwierdzenia ogólne
Są równe
Sprawdź, czy dwa obiekty są równe
template<typename T>
static void Assert::AreEqual(
const T& expected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Sprawdź, czy dwa podwójne są równe
static void Assert::AreEqual(
double expected,
double actual,
double tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Sprawdź, czy dwa zmiennoprzecinki są równe
static void Assert::AreEqual(
float expected,
float actual,
float tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Sprawdź, czy dwa ciągi znaków* są równe
static void Assert::AreEqual(
const char* expected,
const char* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Sprawdź, czy dwa ciągi w_char* są równe
static void Assert::AreEqual(
const wchar_t* expected,
const wchar_t* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Nie są równe
Sprawdź, czy dwa podwojenia nie są równe
static void Assert::AreNotEqual(
double notExpected,
double actual,
double tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Sprawdź, czy dwa zmiennoprzecinki nie są równe
static void Assert::AreNotEqual(
float notExpected,
float actual,
float tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Sprawdź, czy dwa ciągi znaków* nie są równe
static void Assert::AreNotEqual(
const char* notExpected,
const char* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Sprawdź, czy dwa ciągi w_char* nie są równe
static void Assert::AreNotEqual(
const wchar_t* notExpected,
const wchar_t* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Sprawdź, czy dwa odwołania nie są równe na podstawie operatora==.
template<typename T>
static void Assert::AreNotEqual(
const T& notExpected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Są takie same
Sprawdź, czy dwa odwołania odwołują się do tego samego wystąpienia obiektu (tożsamości).
template<typename T>
static void Assert::AreSame(
const T& expected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Nie są takie same
Sprawdź, czy dwa odwołania nie odwołują się do tego samego wystąpienia obiektu (tożsamości).
template<typename T>
static void Assert::AreNotSame (
const T& notExpected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ma wartość null
Sprawdź, czy wskaźnik ma wartość NULL.
template<typename T>
static void Assert::IsNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Nie ma wartości null
Sprawdź, czy wskaźnik nie ma wartości NULL
template<typename T>
static void Assert::IsNotNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Jest prawdziwe
Sprawdź, czy warunek ma wartość true
static void Assert::IsTrue(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Jest fałszem
Sprawdź, czy warunek ma wartość false
static void Assert::IsFalse(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Niepowodzenie
Wymuszanie niepowodzenia wyniku przypadku testowego
static void Assert::Fail(
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
asercyjnie środowisko wykonawcze systemu Windows
Są równe
Sprawdza, czy dwa wskaźniki środowisko wykonawcze systemu Windows są równe.
template<typename T>
static void Assert::AreEqual(
T^ expected,
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Sprawdza, czy dwa ciągi Platform::String^ są równe.
template<typename T>
static void Assert::AreEqual(
T^ expected,
T^ actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Są takie same
Sprawdza, czy dwa środowisko wykonawcze systemu Windows odwołania odwołują się do tego samego obiektu.
template<typename T>
static void Assert::AreSame(
T% expected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Nie są równe
Sprawdza, czy dwa wskaźniki środowisko wykonawcze systemu Windows nie są równe.
template<typename T>
static void Assert::AreNotEqual(
T^ notExpected,
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Sprawdza, czy dwa ciągi Platform::String^ nie są równe.
static void Assert::AreNotEqual(
Platform::String^ notExpected,
Platform::String^ actual,
bool ignoreCase = false,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Nie są takie same
Sprawdza, czy dwa odwołania środowisko wykonawcze systemu Windows nie odwołują się do tego samego obiektu.
template<typename T>
static void Assert::AreNotSame(
T% notExpected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Ma wartość null
Sprawdza, czy wskaźnik środowisko wykonawcze systemu Windows jest wartością nullptr.
template<typename T>
static void Assert::IsNull(
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Nie ma wartości null
Sprawdza, czy wskaźnik środowisko wykonawcze systemu Windows nie jest elementem nullptr.
template<typename T>
static void Assert::IsNotNull(
T^ actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Potwierdzenia wyjątków
Oczekiwano wyjątku
Sprawdź, czy funkcja zgłasza wyjątek:
template<typename _EXPECTEDEXCEPTION, typename _FUNCTOR>
static void Assert::ExpectException(
_FUNCTOR functor,
const wchar_t* message= NULL,
const __LineInfo* pLineInfo= NULL)
Sprawdź, czy funkcja zgłasza wyjątek:
template<typename _EXPECTEDEXCEPTION, typename _RETURNTYPE>
static void Assert::ExpectException(
_RETURNTYPE (*func)(),
const wchar_t* message= NULL,
const __LineInfo* pLineInfo = NULL)
CppUnitTestLogger.h
Rejestratora
Klasa Rejestrator zawiera metody statyczne do zapisu w oknie danych wyjściowych.
Napisz wiadomość
Zapisywanie ciągu w oknie danych wyjściowych
static void Logger::WriteMessage(const wchar_t* message)
static void Logger::WriteMessage(const char* message)
Przykład
Ten kod jest przykładem użycia narzędzia VSCppUnit. Zawiera przykłady metadanych atrybutów, urządzeń, testów jednostkowych z asercji i rejestrowania niestandardowego.
// USAGE EXAMPLE
#include <CppUnitTest.h>
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
BEGIN_TEST_MODULE_ATTRIBUTE()
TEST_MODULE_ATTRIBUTE(L"Date", L"2010/6/12")
END_TEST_MODULE_ATTRIBUTE()
TEST_MODULE_INITIALIZE(ModuleInitialize)
{
Logger::WriteMessage("In Module Initialize");
}
TEST_MODULE_CLEANUP(ModuleCleanup)
{
Logger::WriteMessage("In Module Cleanup");
}
TEST_CLASS(Class1)
{
public:
Class1()
{
Logger::WriteMessage("In Class1");
}
~Class1()
{
Logger::WriteMessage("In ~Class1");
}
TEST_CLASS_INITIALIZE(ClassInitialize)
{
Logger::WriteMessage("In Class Initialize");
}
TEST_CLASS_CLEANUP(ClassCleanup)
{
Logger::WriteMessage("In Class Cleanup");
}
BEGIN_TEST_METHOD_ATTRIBUTE(Method1)
TEST_OWNER(L"OwnerName")
TEST_PRIORITY(1)
END_TEST_METHOD_ATTRIBUTE()
TEST_METHOD(Method1)
{
Logger::WriteMessage("In Method1");
Assert::AreEqual(0, 0);
}
TEST_METHOD(Method2)
{
Assert::Fail(L"Fail");
}
};