다음을 통해 공유


Microsoft.VisualStudio.TestTools.CppUnitTestFramework API 참조

이 항목에서는 Microsoft::VisualStudio::CppUnitTestFramework 네임스페이스의 public 구성원 목록을 제공합니다. 이 API를 사용하여 Microsoft Native Unit Test Framework를 기반으로 C++ 단위 테스트를 작성합니다. 이 항목의 마지막에는 사용 예제가 있습니다.

헤더 및 lib 파일은 <Visual Studio 설치 폴더>\VC\Auxiliary\VS\UnitTest에 있습니다.

헤더 및 라이브러리 경로는 기본 테스트 프로젝트에서 자동으로 구성됩니다.

이 항목의 내용

CppUnitTest.h

CppUnitTest.h

테스트 클래스와 메서드 만들기

TEST_CLASS(className)

테스트 메서드를 포함하는 각 클래스에 필요합니다. className을 테스트 클래스로 식별합니다. 네임스페이스 범위에서 TEST_CLASS를 선언해야 합니다.

TEST_METHOD(methodName)
{
    // test method body
}

methodName을 테스트 메서드로 정의합니다. 메서드의 클래스 범위에서 TEST_METHOD를 선언해야 합니다.

초기화 및 정리

테스트 방법

TEST_METHOD_INITIALIZE(methodName)
{
    // method initialization code
}

각 테스트 메서드를 실행하기 전에 실행되는 메서드로 methodName을 정의합니다. TEST_METHOD_INITIALIZE는 테스트 클래스에서 한 번만 정의할 수 있으며 테스트 클래스의 범위에서 정의해야 합니다.

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

각 테스트 메서드를 실행한 후에 실행되는 메서드로 methodName을 정의합니다. TEST_METHOD_CLEANUP는 테스트 클래스에서 한 번만 정의할 수 있으며 테스트 클래스의 범위에서 정의해야 합니다.

테스트 클래스

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

각 테스트 클래스를 만들기 전에 실행되는 메서드로 methodName을 정의합니다. TEST_CLASS_INITIALIZE는 테스트 클래스에서 한 번만 정의할 수 있으며 테스트 클래스의 범위에서 정의해야 합니다.

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

각 테스트 클래스를 만든 후에 실행되는 메서드로 methodName을 정의합니다. TEST_CLASS_CLEANUP는 테스트 클래스에서 한 번만 정의할 수 있으며 테스트 클래스의 범위에서 정의해야 합니다.

테스트 모듈

TEST_MODULE_INITIALIZE(methodName)
{
    // module initialization code
}

모듈을 로드할 때 실행되는 메서드 methodName을 정의합니다. TEST_MODULE_INITIALIZE는 테스트 모듈에서 한 번만 정의할 수 있으며 네임스페이스 범위에서 선언해야 합니다.

TEST_MODULE_CLEANUP(methodName)

모듈을 언로드할 때 실행되는 메서드 methodName을 정의합니다. TEST_MODULE_CLEANUP는 테스트 모듈에서 한 번만 정의할 수 있으며 네임스페이스 범위에서 선언해야 합니다.

테스트 특성 만들기

테스트 메서드 특성

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

하나 이상의 TEST_METHOD_ATTRIBUTE 매크로로 정의된 특성을 테스트 메서드 testMethodName에 추가합니다.

TEST_METHOD_ATTRIBUTE 매크로는 이름 attributeName 및 값 attributeValue를 사용하여 특성을 정의합니다.

테스트 클래스 특성

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

하나 이상의 TEST_CLASS_ATTRIBUTE 매크로로 정의된 특성을 테스트 클래스 testClassName에 추가합니다.

TEST_CLASS_ATTRIBUTE 매크로는 이름 attributeName 및 값 attributeValue를 사용하여 특성을 정의합니다.

테스트 모듈 특성

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

하나 이상의 TEST_MODULE_ATTRIBUTE 매크로로 정의된 특성을 테스트 모듈 testModuleName에 추가합니다.

TEST_MODULE_ATTRIBUTE 매크로는 이름 attributeName 및 값 attributeValue를 사용하여 특성을 정의합니다.

미리 정의된 특성

미리 정의된 이러한 특성 매크로는 일반적인 경우에 간편하게 사용할 수 있도록 제공됩니다. 위에서 설명한 TEST_METHOD_ATTRIBUTE 매크로 대신 사용할 수 있습니다.

TEST_OWNER(ownerAlias)

이름 Owner 및 특성 값 ownerAlias를 사용하여 TEST_METHOD_ATTRIBUTE를 정의합니다.

TEST_DESCRIPTION(description)

이름 Description 및 특성 값 description을 사용하여 TEST_METHOD_ATTRIBUTE를 정의합니다.

TEST_PRIORITY(priority)

이름 Priority 및 특성 값 priority를 사용하여 TEST_METHOD_ATTRIBUTE를 정의합니다.

TEST_WORKITEM(workitem)

이름 WorkItem 및 특성 값 workItem을 사용하여 TEST_METHOD_ATTRIBUTE를 정의합니다.

TEST_IGNORE()

이름 Ignore 및 특성 값 true를 사용하여 TEST_METHOD_ATTRIBUTE를 정의합니다.

CppUnitTestAssert.h

일반 어설션

AreEqual

두 개체가 같은지 확인합니다.

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

두 double이 같은지 확인합니다.

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

두 부동이 같은지 확인합니다.

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

두 char* 문자열이 같은지 확인합니다.

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

두 w_char* 문자열이 같은지 확인합니다.

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

AreNotEqual

두 double이 같지 않은지 확인합니다.

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

두 부동이 같지 않은지 확인합니다.

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

두 char* 문자열이 같지 않은지 확인합니다.

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

두 w_char* 문자열이 같지 않은지 확인합니다.

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==를 기준으로 하여 두 참조가 같지 않은지 확인합니다.

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

AreSame

두 참조가 같은 개체 인스턴스(ID)를 참조하는지 확인합니다.

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

AreNotSame

두 참조가 같은 개체 인스턴스(ID)를 참조하지 않는지 확인합니다.

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

IsNull

포인터가 NULL인지 확인합니다.

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

IsNotNull

포인터가 NULL이 아닌지 확인합니다.

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

IsTrue

조건이 true인지 확인합니다.

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

IsFalse

조건이 false인지 확인합니다.

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

실패

테스트 사례가 실패한 것으로 강제 지정합니다.

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

Windows 런타임 어설션

AreEqual

두 Windows 런타임 포인터가 같은지 확인합니다.

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

두 Platform::String^ 문자열이 같은지 확인합니다.

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

AreSame

두 Windows 런타임 참조가 같은 개체를 참조하는지 확인합니다.

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

AreNotEqual

두 Windows 런타임 포인터가 같지 않은지 확인합니다.

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

두 Platform::String^ 문자열이 같지 않은지 확인합니다.

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

AreNotSame

두 Windows 런타임 참조가 같은 개체를 참조하지 않는지 확인합니다.

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

IsNull

Windows 런타임 포인터가 nullptr인지 확인합니다.

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

IsNotNull

Windows 런타임 포인터가 nullptr이 아닌지 확인합니다.

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

예외 어설션

EXPECTEXCEPTION

함수에서 예외가 발생하는지 확인합니다.

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

함수에서 예외가 발생하는지 확인합니다.

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

CppUnitTestLogger.h

로거

Logger 클래스는 출력 창에 작성하는 정적 메서드를 포함합니다.

메시지 작성

출력 창에 문자열 작성

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

예시

이 코드는 VSCppUnit 사용 예입니다. 여기에는 특성 메타데이터, 장치, 어셜션 포함 단위 테스트, 사용자 지정 로깅이 포함됩니다.

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

참고 항목