Referensi API Microsoft.VisualStudio.TestTools.CppUnitTestFramework

Topik ini mencantumkan anggota publik namespace Microsoft::VisualStudio::CppUnitTestFramework. Gunakan API ini untuk menulis pengujian unit C++ berdasarkan Microsoft Native Unit Test Framework. Ada Contoh Penggunaan di akhir topik.

File header dan lib terletak di bawah <folder penginstalan Visual Studio>\VC\Auxiliary\VS\UnitTest.

Jalur header dan lib otomatis dikonfigurasi dalam proyek Native Test.

Dalam topik ini

CppUnitTest.h

CppUnitTest.h

Membuat kelas dan metode pengujian

TEST_CLASS(className)

Diperlukan untuk setiap kelas yang berisi metode pengujian. Mengidentifikasi className sebagai kelas pengujian. TEST_CLASS harus dideklarasikan pada cakupan namespace.

TEST_METHOD(methodName)
{
    // test method body
}

Mendefinisikan methodName sebagai metode pengujian. TEST_METHOD harus dideklarasikan dalam cakupan kelas metode.

Menginisialisasi dan membersihkan

Metode pengujian

TEST_METHOD_INITIALIZE(methodName)
{
    // method initialization code
}

Mendefinisikan methodName sebagai metode yang berjalan sebelum setiap metode pengujian dijalankan. TEST_METHOD_INITIALIZE hanya dapat didefinisikan sekali dalam kelas pengujian dan harus didefinisikan dalam cakupan kelas pengujian.

TEST_METHOD_CLEANUP(methodName)
{
    // test method cleanup  code
}

Mendefinisikan methodName sebagai metode yang berjalan setelah setiap metode pengujian dijalankan. TEST_METHOD_CLEANUP hanya dapat didefinisikan sekali dalam kelas pengujian dan harus didefinisikan dalam cakupan kelas pengujian.

Kelas pengujian

TEST_CLASS_INITIALIZE(methodName)
{
    // test class initialization  code
}

Mendefinisikan methodName sebagai metode yang berjalan sebelum setiap kelas pengujian dibuat. TEST_CLASS_INITIALIZE hanya dapat didefinisikan sekali dalam kelas pengujian dan harus didefinisikan dalam cakupan kelas pengujian.

TEST_CLASS_CLEANUP(methodName)
{
    // test class cleanup  code
}

Menentukan methodName sebagai metode yang berjalan setelah setiap kelas pengujian dibuat. TEST_CLASS_CLEANUP hanya dapat didefinisikan sekali dalam kelas pengujian dan harus didefinisikan dalam cakupan kelas pengujian.

Modul pengujian

TEST_MODULE_INITIALIZE(methodName)
{
    // module initialization code
}

Menentukan methodName metode yang berjalan saat modul dimuat. TEST_MODULE_INITIALIZE hanya dapat didefinisikan sekali dalam modul pengujian dan harus dideklarasikan pada cakupan namespace layanan.

TEST_MODULE_CLEANUP(methodName)

Menentukan methodName metode yang berjalan saat modul dibongkar. TEST_MODULE_CLEANUP hanya dapat didefinisikan sekali dalam modul pengujian dan harus dideklarasikan pada cakupan namespace layanan.

Membuat atribut pengujian

Atribut metode pengujian

BEGIN_TEST_METHOD_ATTRIBUTE(testMethodName)
    TEST_METHOD_ATTRIBUTE(attributeName, attributeValue)
    ...
END_TEST_METHOD_ATTRIBUTE()

Menambahkan atribut yang ditentukan dengan satu atau beberapa makro TEST_METHOD_ATTRIBUTE ke metode pengujian testMethodName.

Makro TEST_METHOD_ATTRIBUTE menentukan atribut dengan nama attributeName dan nilai attributeValue.

Atribut kelas pengujian

BEGIN_TEST_CLASS_ATTRIBUTE(testClassName)
    TEST_CLASS_ATTRIBUTE(attributeName, attributeValue)
    ...
END_TEST_CLASS_ATTRIBUTE()

Menambahkan atribut yang ditentukan dengan satu atau beberapa makro TEST_CLASS_ATTRIBUTE ke testClassName kelas pengujian.

Makro TEST_CLASS_ATTRIBUTE menentukan atribut dengan nama attributeName dan nilai attributeValue.

Menguji atribut modul

BEGIN_TEST_MODULE_ATTRIBUTE(testModuleName)
    TEST_MODULE_ATTRIBUTE(attributeName, attributeValue)
    ...
END_TEST_MODULE_ATTRIBUTE()

Menambahkan atribut yang ditentukan dengan satu atau beberapa makro TEST_MODULE_ATTRIBUTE ke modul pengujian testModuleName.

Makro TEST_MODULE_ATTRIBUTE menentukan atribut dengan nama attributeName dan nilai attributeValue.

Atribut yang telah ditentukan sebelumnya

Makro atribut yang telah ditentukan sebelumnya ini disediakan sebagai kenyamanan untuk kasus umum. Makro atribut ini dapat diganti untuk makro TEST_METHOD_ATTRIBUTE yang dijelaskan di atas.

TEST_OWNER(ownerAlias)

Mendefinisikan TEST_METHOD_ATTRIBUTE dengan nama Owner dan nilai atribut ownerAlias.

TEST_DESCRIPTION(description)

Menentukan TEST_METHOD_ATTRIBUTE dengan nama Description dan nilai atribut deskripsi.

TEST_PRIORITY(priority)

Menentukan TEST_METHOD_ATTRIBUTE dengan nama Priority dan nilai atribut prioritas.

TEST_WORKITEM(workitem)

Menentukan TEST_METHOD_ATTRIBUTE dengan nama WorkItem dan nilai atribut workItem.

TEST_IGNORE()

Menentukan TEST_METHOD_ATTRIBUTE dengan nama Ignore dan nilai atribut true.

CppUnitTestAssert.h

Pernyataan Umum

Sama

Verifikasi bahwa dua objek sama

template<typename T>
static void Assert::AreEqual(
    const T& expected,
    const T& actual,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Verifikasi bahwa dua ganda sama

static void Assert::AreEqual(
    double expected,
    double actual,
    double tolerance,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Verifikasi bahwa dua float sama

static void Assert::AreEqual(
    float expected,
    float actual,
    float tolerance,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Verifikasi bahwa dua string char* sama

static void Assert::AreEqual(
    const char* expected,
    const char* actual,
    bool ignoreCase = false,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Verifikasi bahwa dua string w_char* sama

static void Assert::AreEqual(
    const wchar_t* expected,
    const wchar_t* actual,
    bool ignoreCase = false,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Tidak Sama

Verifikasi bahwa dua ganda tidak sama

static void Assert::AreNotEqual(
    double notExpected,
    double actual,
    double tolerance,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Verifikasi bahwa dua float tidak sama

static void Assert::AreNotEqual(
    float notExpected,
    float actual,
    float tolerance,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Verifikasi bahwa dua string char* tidak sama

static void Assert::AreNotEqual(
    const char* notExpected,
    const char* actual,
    bool ignoreCase = false,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Verifikasi bahwa dua string w_char* tidak sama

static void Assert::AreNotEqual(
    const wchar_t* notExpected,
    const wchar_t* actual,
    bool ignoreCase = false,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Verifikasi bahwa dua referensi tidak sama berdasarkan operator==.

template<typename T>
static void Assert::AreNotEqual(
    const T& notExpected,
    const T& actual,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Sama

Verifikasi bahwa dua referensi merujuk ke instans objek (identitas) yang sama.

template<typename T>
static void Assert::AreSame(
    const T& expected,
    const T& actual,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Tidak Sama

Verifikasi bahwa dua referensi tidak merujuk ke instans objek (identitas) yang sama.

template<typename T>
static void Assert::AreNotSame (
    const T& notExpected,
    const T& actual,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Null

Verifikasi bahwa pointer adalah NULL.

template<typename T>
static void Assert::IsNull(
    const T* actual,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Bukan Null

Verifikasi bahwa penunjuk bukan NULL

template<typename T>
static void Assert::IsNotNull(
    const T* actual,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Benar

Verifikasi bahwa kondisi benar

static void Assert::IsTrue(
    bool condition,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Salah

Verifikasi bahwa kondisi salah

static void Assert::IsFalse(
    bool condition,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Gagal

Paksa hasil kasus pengujian gagal

static void Assert::Fail(
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Pernyataan Runtime Windows

Sama

Memverifikasi bahwa dua penunjuk runtime Windows sama.

template<typename T>
static void Assert::AreEqual(
    T^ expected,
    T^ actual,
    Platform::String^ message = nullptr,
    const __LineInfo* pLineInfo= nullptr)

Memverifikasi bahwa dua string Platform::String^ sama.

template<typename T>
static void Assert::AreEqual(
    T^ expected,
    T^ actual,
    Platform::String^ message= nullptr,
    const __LineInfo* pLineInfo= nullptr)

Sama

Memverifikasi bahwa dua referensi Windows Runtime mereferensikan objek yang sama.

template<typename T>
static void Assert::AreSame(
    T% expected,
    T% actual,
    Platform::String^ message= nullptr,
    const __LineInfo* pLineInfo= nullptr)

Tidak Sama

Memverifikasi bahwa dua penunjuk runtime Windows tidak sama.

template<typename T>
static void Assert::AreNotEqual(
    T^ notExpected,
    T^ actual,
    Platform::String^ message = nullptr,
    const __LineInfo* pLineInfo= nullptr)

Memverifikasi bahwa dua string Platform::String^ tidak sama.

static void Assert::AreNotEqual(
    Platform::String^ notExpected,
    Platform::String^ actual,
    bool ignoreCase = false,
    Platform::String^ message= nullptr,
    const __LineInfo* pLineInfo= nullptr)

Tidak Sama

Memverifikasi bahwa dua referensi Windows Runtime tidak mereferensikan objek yang sama.

template<typename T>
static void Assert::AreNotSame(
    T% notExpected,
    T% actual,
    Platform::String^ message= nullptr,
    const __LineInfo* pLineInfo= nullptr)

Null

Memverifikasi bahwa penunjuk Windows Runtime adalah nullptr.

template<typename T>
static void Assert::IsNull(
    T^ actual,
    Platform::String^ message = nullptr,
    const __LineInfo* pLineInfo= nullptr)

Bukan Null

Memverifikasi bahwa penunjuk runtime Windows bukan nullptr.

template<typename T>
static void Assert::IsNotNull(
    T^ actual,
    Platform::String^ message= nullptr,
    const __LineInfo* pLineInfo= nullptr)

Pernyataan Pengecualian

Mengharapkan Pengecualian

Verifikasi bahwa fungsi memunculkan pengecualian:

template<typename _EXPECTEDEXCEPTION, typename _FUNCTOR>
static void Assert::ExpectException(
    _FUNCTOR functor,
    const wchar_t* message= NULL,
    const __LineInfo* pLineInfo= NULL)

Verifikasi bahwa fungsi memunculkan pengecualian:

template<typename _EXPECTEDEXCEPTION, typename _RETURNTYPE>
    static void Assert::ExpectException(
    _RETURNTYPE (*func)(),
    const wchar_t* message= NULL,
    const __LineInfo* pLineInfo = NULL)

CppUnitTestLogger.h

Pencatat

Kelas Pencatat berisi metode statis untuk menulis ke Jendela Output.

Tulis Pesan

Menulis string ke Jendela Output

static void Logger::WriteMessage(const wchar_t* message)
static void Logger::WriteMessage(const char* message)

Contoh

Kode ini adalah contoh penggunaan VSCppUnit. Ini termasuk contoh metadata atribut, perlengkapan, pengujian unit dengan pernyataan, dan pengelogan kustom.

// 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");
    }
};

Baca juga