Aracılığıyla paylaş


Microsoft.VisualStudio.TestTools.CppUnitTestFramework API başvurusu

Bu konu başlığı altında ad alanının genel üyeleri Microsoft::VisualStudio::CppUnitTestFramework listelenir. Microsoft Yerel Birim Test Çerçevesi'ni temel alan C++ birim testleri yazmak için bu API'leri kullanın. Konunun sonunda bir Kullanım Örneği vardır.

Üst bilgi ve lib dosyaları Visual Studio yükleme klasörü>\VC\Auxiliary\VS\UnitTest altında <bulunur.

Üst bilgi ve lib yolları, Yerel Test projesinde otomatik olarak yapılandırılır.

Bu konuda,

CppUnitTest.h

CppUnitTest.h

Test sınıfları ve yöntemleri oluşturma

TEST_CLASS(className)

Test yöntemlerini içeren her sınıf için gereklidir. className'i bir test sınıfı olarak tanımlar. TEST_CLASS ad alanı kapsamında bildirilmelidir.

TEST_METHOD(methodName)
{
    // test method body
}

methodName'i bir test yöntemi olarak tanımlar. TEST_METHOD yöntemin sınıfı kapsamında bildirilmelidir.

Başlatma ve temizleme

Test yöntemleri

TEST_METHOD_INITIALIZE(methodName)
{
    // method initialization code
}

methodName öğesini her test yöntemi çalıştırilmeden önce çalışan bir yöntem olarak tanımlar. TEST_METHOD_INITIALIZE bir test sınıfında yalnızca bir kez tanımlanabilir ve test sınıfı kapsamında tanımlanmalıdır.

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

methodName öğesini her test yöntemi çalıştırıldıktan sonra çalışan bir yöntem olarak tanımlar. TEST_METHOD_CLEANUP bir test sınıfında yalnızca bir kez tanımlanabilir ve test sınıfı kapsamında tanımlanmalıdır.

Test sınıfları

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

methodName öğesini her test sınıfı oluşturulmadan önce çalışan bir yöntem olarak tanımlar. TEST_CLASS_INITIALIZE bir test sınıfında yalnızca bir kez tanımlanabilir ve test sınıfı kapsamında tanımlanmalıdır.

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

methodName öğesini her test sınıfı oluşturulduktan sonra çalışan bir yöntem olarak tanımlar. TEST_CLASS_CLEANUP bir test sınıfında yalnızca bir kez tanımlanabilir ve test sınıfı kapsamında tanımlanmalıdır.

Test modülleri

TEST_MODULE_INITIALIZE(methodName)
{
    // module initialization code
}

Bir modül yüklendiğinde çalıştırılan methodName yöntemini tanımlar. TEST_MODULE_INITIALIZE bir test modülünde yalnızca bir kez tanımlanabilir ve ad alanı kapsamında bildirilmelidir.

TEST_MODULE_CLEANUP(methodName)

Bir modül kaldırıldığında çalıştırılan methodName yöntemini tanımlar. TEST_MODULE_CLEANUP bir test modülünde yalnızca bir kez tanımlanabilir ve ad alanı kapsamında bildirilmelidir.

Test öznitelikleri oluşturma

Test yöntemi öznitelikleri

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

Test yöntemi testMethodName'e bir veya daha fazla TEST_METHOD_ATTRIBUTE makroyla tanımlanan öznitelikleri ekler.

MakroTEST_METHOD_ATTRIBUTE, attributeName adlı bir özniteliği ve attributeValue değerini tanımlar.

Sınıf özniteliklerini test edin

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

Test sınıfı testClassName öğesine bir veya daha fazla TEST_CLASS_ATTRIBUTE makroyla tanımlanan öznitelikleri ekler.

MakroTEST_CLASS_ATTRIBUTE, attributeName adlı bir özniteliği ve attributeValue değerini tanımlar.

Modül özniteliklerini test edin

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

Test modülü testModuleName'e bir veya daha fazla TEST_MODULE_ATTRIBUTE makroyla tanımlanan öznitelikleri ekler.

MakroTEST_MODULE_ATTRIBUTE, attributeName adlı bir özniteliği ve attributeValue değerini tanımlar.

Önceden tanımlanmış öznitelikler

Bu önceden tanımlanmış öznitelik makroları, yaygın durumlar için kolaylık sağlamak amacıyla sağlanır. Bunlar yukarıda açıklanan makroyla TEST_METHOD_ATTRIBUTE değiştirilebilir.

TEST_OWNER(ownerAlias)

sahipAlias'ın adı Owner ve öznitelik değeri ile bir TEST_METHOD_ATTRIBUTE tanımlar.

TEST_DESCRIPTION(description)

adı Description ve açıklama öznitelik değeri ile bir TEST_METHOD_ATTRIBUTE tanımlar.

TEST_PRIORITY(priority)

adı Priority ve öncelik öznitelik değeri ile bir TEST_METHOD_ATTRIBUTE tanımlar.

TEST_WORKITEM(workitem)

workItem'in adı WorkItem ve öznitelik değeri ile bir TEST_METHOD_ATTRIBUTE tanımlar.

TEST_IGNORE()

adı Ignore ve öznitelik değeri trueile bir TEST_METHOD_ATTRIBUTE tanımlar.

CppUnitTestAssert.h

Genel Onaylar

Eşit

İki nesnenin eşit olduğunu doğrulayın

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

İki çiftin eşit olduğunu doğrulayın

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

İki kayan noktanın eşit olduğunu doğrulayın

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

İki karakter* dizenin eşit olduğunu doğrulayın

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

İki w_char* dizenin eşit olduğunu doğrulayın

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

Eşit Değil

İki çiftin eşit olmadığını doğrulayın

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

İki kayan değerin eşit olmadığını doğrulayın

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

İki char* dizesinin eşit olmadığını doğrulayın

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

İki w_char* dizenin eşit olmadığını doğrulayın

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

operator== temelinde iki başvuruya eşit olmadığını doğrulayın.

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

Aynı

İki başvurunun aynı nesne örneğine (kimlik) başvurduğunu doğrulayın.

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

Aynı Değil

İki başvurunun aynı nesne örneğine (kimlik) başvurmadığını doğrulayın.

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

Is Null

İşaretçinin NULL olduğunu doğrulayın.

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

Null Değil

İşaretçinin NULL olmadığını doğrulama

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

Is True

Koşulun doğru olduğunu doğrulama

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

Yanlış

Koşulun yanlış olduğunu doğrulama

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

Başarısız

Test çalışması sonucunun başarısız olmasını zorlama

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

Windows Çalışma Zamanı Onayları

Eşit

İki Windows Çalışma Zamanı işaretçinin eşit olduğunu doğrular.

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

İki Platform::String^ dizesinin eşit olduğunu doğrular.

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

Aynı

İki Windows Çalışma Zamanı başvurusunun aynı nesneye başvurduğunu doğrular.

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

Eşit Değil

İki Windows Çalışma Zamanı işaretçinin eşit olmadığını doğrular.

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

İki Platform::String^ dizesinin eşit olmadığını doğrular.

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

Aynı Değil

İki Windows Çalışma Zamanı başvurusunun aynı nesneye başvurmadığını doğrular.

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

Is Null

Windows Çalışma Zamanı işaretçinin nullptr olduğunu doğrular.

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

Null Değil

Windows Çalışma Zamanı işaretçinin nullptr olmadığını doğrular.

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

Özel Durum Onayları

Özel Durum Bekle

İşlevin özel durum oluşturduğunu doğrulayın:

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

İşlevin özel durum oluşturduğunu doğrulayın:

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

CppUnitTestLogger.h

Günlükçü

Günlükçü sınıfı, Çıkış Penceresi'ne yazmak için statik yöntemler içerir.

İleti Yaz

Çıkış Penceresine dize yazma

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

Örnek

Bu kod, VSCppUnit kullanımına bir örnektir. Öznitelik meta verileri, fikstürler, onaylarla birim testleri ve özel günlük örnekleri içerir.

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

Ayrıca bkz.