Informations de référence sur l’API Microsoft.VisualStudio.TestTools.CppUnitTestFramework
Cette rubrique liste les membres publics de l’espace de noms Microsoft::VisualStudio::CppUnitTestFramework
. Utilisez ces API pour écrire des tests unitaires C++ basés sur le framework de tests unitaires natifs Microsoft. Vous pouvez trouver un exemple d’utilisation à la fin de la rubrique.
Les fichiers d’en-tête et de bibliothèque se trouvent à l’emplacement suivant : <dossier d’installation de Visual Studio>\VC\Auxiliary\VS\UnitTest.
Les chemins des fichiers d’en-tête et de bibliothèque sont configurés automatiquement dans un projet de test natif.
Dans cette rubrique
CppUnitTest.h
Créer des classes et des méthodes de test
TEST_CLASS(className)
Obligatoire pour chaque classe contenant des méthodes de test. Identifie className en tant que classe de test. TEST_CLASS
doit être déclaré dans l’étendue de l’espace de noms.
TEST_METHOD(methodName)
{
// test method body
}
Définit methodName en tant que méthode de test. TEST_METHOD
doit être déclaré dans la portée de la classe de la méthode.
Initialiser et nettoyer
Méthodes de test
TEST_METHOD_INITIALIZE(methodName)
{
// method initialization code
}
Définit methodName en tant que méthode qui s’exécute avant l’exécution de chaque méthode de test. TEST_METHOD_INITIALIZE
ne peut être défini qu’une seule fois dans une classe de test et doit être défini dans la portée de la classe de test.
TEST_METHOD_CLEANUP(methodName)
{
// test method cleanup code
}
Définit methodName en tant que méthode qui s’exécute après l’exécution de chaque méthode de test. TEST_METHOD_CLEANUP
ne peut être défini qu’une seule fois dans une classe de test et doit être défini dans la portée de la classe de test.
Classes de test
TEST_CLASS_INITIALIZE(methodName)
{
// test class initialization code
}
Définit methodName en tant que méthode qui s’exécute avant la création de chaque classe de test. TEST_CLASS_INITIALIZE
ne peut être défini qu’une seule fois dans une classe de test et doit être défini dans la portée de la classe de test.
TEST_CLASS_CLEANUP(methodName)
{
// test class cleanup code
}
Définit methodName en tant que méthode qui s’exécute après la création de chaque classe de test. TEST_CLASS_CLEANUP
ne peut être défini qu’une seule fois dans une classe de test et doit être défini dans la portée de la classe de test.
Modules de test
TEST_MODULE_INITIALIZE(methodName)
{
// module initialization code
}
Définit la méthode methodName qui s’exécute au moment du chargement d’un module. TEST_MODULE_INITIALIZE
ne peut être défini qu’une seule fois dans un module de test et doit être déclaré dans la portée de l’espace de noms.
TEST_MODULE_CLEANUP(methodName)
Définit la méthode methodName qui s’exécute au moment du déchargement d’un module. TEST_MODULE_CLEANUP
ne peut être défini qu’une seule fois dans un module de test et doit être déclaré dans la portée de l’espace de noms.
Créer des attributs de test
Attributs de méthode de test
BEGIN_TEST_METHOD_ATTRIBUTE(testMethodName)
TEST_METHOD_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_METHOD_ATTRIBUTE()
Ajoute les attributs définis avec une ou plusieurs macros TEST_METHOD_ATTRIBUTE
à la méthode de test testMethodName.
Une macro TEST_METHOD_ATTRIBUTE
définit un attribut avec le nom attributeName et la valeur attributeValue.
Attributs de classe de test
BEGIN_TEST_CLASS_ATTRIBUTE(testClassName)
TEST_CLASS_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_CLASS_ATTRIBUTE()
Ajoute les attributs définis avec une ou plusieurs macros TEST_CLASS_ATTRIBUTE
à la classe de test testClassName.
Une macro TEST_CLASS_ATTRIBUTE
définit un attribut avec le nom attributeName et la valeur attributeValue.
Attributs de module de test
BEGIN_TEST_MODULE_ATTRIBUTE(testModuleName)
TEST_MODULE_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_MODULE_ATTRIBUTE()
Ajoute les attributs définis avec une ou plusieurs macros TEST_MODULE_ATTRIBUTE
au module de test testModuleName.
Une macro TEST_MODULE_ATTRIBUTE
définit un attribut avec le nom attributeName et la valeur attributeValue.
Attributs prédéfinis
Ces macros d’attributs prédéfinis sont fournis pour des raisons pratiques pour les cas courants. Ils peuvent être remplacées par la macro TEST_METHOD_ATTRIBUTE
décrite ci-dessus.
TEST_OWNER(ownerAlias)
Définit un TEST_METHOD_ATTRIBUTE
avec le nom Owner
et la valeur d’attribut ownerAlias.
TEST_DESCRIPTION(description)
Définit un TEST_METHOD_ATTRIBUTE
avec le nom Description
et la valeur d’attribut description.
TEST_PRIORITY(priority)
Définit un TEST_METHOD_ATTRIBUTE
avec le nom Priority
et la valeur de l’attribut priority.
TEST_WORKITEM(workitem)
Définit un TEST_METHOD_ATTRIBUTE
avec le nom WorkItem
et la valeur de l’attribut workItem.
TEST_IGNORE()
Définit un TEST_METHOD_ATTRIBUTE
avec le nom Ignore
et la valeur de l’attribut true
.
CppUnitTestAssert.h
Assertions générales
Sont égaux
Vérifie que deux objets sont égaux
template<typename T>
static void Assert::AreEqual(
const T& expected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Vérifie que deux valeurs double sont égales
static void Assert::AreEqual(
double expected,
double actual,
double tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Vérifie que deux valeurs float sont égales
static void Assert::AreEqual(
float expected,
float actual,
float tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Vérifie que deux chaînes char* sont égales
static void Assert::AreEqual(
const char* expected,
const char* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Vérifie que deux chaînes w_char* sont égales
static void Assert::AreEqual(
const wchar_t* expected,
const wchar_t* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ne sont pas égaux
Vérifie que deux valeurs double ne sont pas égales
static void Assert::AreNotEqual(
double notExpected,
double actual,
double tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Vérifie que deux valeurs float ne sont pas égales
static void Assert::AreNotEqual(
float notExpected,
float actual,
float tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Vérifie que deux chaînes char* ne sont pas égales
static void Assert::AreNotEqual(
const char* notExpected,
const char* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Vérifie que deux chaînes w_char* ne sont pas égales
static void Assert::AreNotEqual(
const wchar_t* notExpected,
const wchar_t* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Vérifie que deux références ne sont pas égales sur la base de l’opérateur ==.
template<typename T>
static void Assert::AreNotEqual(
const T& notExpected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Sont identiques
Vérifie que deux références référencent la même instance d’objet (identité).
template<typename T>
static void Assert::AreSame(
const T& expected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ne sont pas identiques
Vérifie que deux références ne référencent pas la même instance d’objet (identité).
template<typename T>
static void Assert::AreNotSame (
const T& notExpected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
A une valeur nulle
Vérifie qu’un pointeur a une valeur NULL.
template<typename T>
static void Assert::IsNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
N’a pas de valeur nulle
Vérifie qu’un pointeur n’a pas une valeur NULL
template<typename T>
static void Assert::IsNotNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Est vrai
Vérifie qu’une condition est vraie
static void Assert::IsTrue(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Est faux
Vérifie qu’une condition est fausse
static void Assert::IsFalse(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Échec
Force l’échec du résultat du cas de test
static void Assert::Fail(
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Assertions Windows Runtime
Sont égaux
Vérifie que deux pointeurs Windows Runtime sont égaux.
template<typename T>
static void Assert::AreEqual(
T^ expected,
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Vérifie que deux chaînes Platform::String^ sont égales.
template<typename T>
static void Assert::AreEqual(
T^ expected,
T^ actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Sont identiques
Vérifie que deux références Windows Runtime référencent le même objet.
template<typename T>
static void Assert::AreSame(
T% expected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Ne sont pas égaux
Vérifie que deux pointeurs Windows Runtime ne sont pas égaux.
template<typename T>
static void Assert::AreNotEqual(
T^ notExpected,
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Vérifie que deux chaînes Platform::String^ ne sont pas égales.
static void Assert::AreNotEqual(
Platform::String^ notExpected,
Platform::String^ actual,
bool ignoreCase = false,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Ne sont pas identiques
Vérifie que deux références Windows Runtime ne référencent pas le même objet.
template<typename T>
static void Assert::AreNotSame(
T% notExpected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
A une valeur nulle
Vérifie qu’un pointeur Windows Runtime est nullptr.
template<typename T>
static void Assert::IsNull(
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
N’a pas de valeur nulle
Vérifie qu’un pointeur Windows Runtime n’est pas nullptr.
template<typename T>
static void Assert::IsNotNull(
T^ actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Assertions d’exception
S’attendre à une exception
Vérifie qu’une fonction lève une exception :
template<typename _EXPECTEDEXCEPTION, typename _FUNCTOR>
static void Assert::ExpectException(
_FUNCTOR functor,
const wchar_t* message= NULL,
const __LineInfo* pLineInfo= NULL)
Vérifie qu’une fonction lève une exception :
template<typename _EXPECTEDEXCEPTION, typename _RETURNTYPE>
static void Assert::ExpectException(
_RETURNTYPE (*func)(),
const wchar_t* message= NULL,
const __LineInfo* pLineInfo = NULL)
CppUnitTestLogger.h
Enregistreur
La classe Logger contient des méthodes statiques pour écrire dans la fenêtre Sortie.
Écrire un message
Écrire une chaîne dans la fenêtre Sortie
static void Logger::WriteMessage(const wchar_t* message)
static void Logger::WriteMessage(const char* message)
Exemple
Ce code est un exemple d’utilisation de VSCppUnit. Il inclut des exemples de métadonnées d’attribut, de fixtures, de tests unitaires avec des assertions et de journalisation personnalisée.
// 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");
}
};