Microsoft.VisualStudio.TestTools.CppUnitTestFramework 사용
이 항목에서는 Microsoft::VisualStudio::CppUnitTestFramework 네임 스페이스의 공용 멤버입니다.
헤더 파일은 VisualStudio2012[x86]InstallFolder**\VC\UnitTest\include** 폴더내에 위치합니다.
Lib 파일은 VisualStudio2012[x86]InstallFolder**\VC\UnitTest\lib** 폴더 내에 위치합니다.
항목 내용
CppUnitTest.h
테스트 클래스와 메서드를 작성합니다
초기화 및 정리
테스트 메서드
테스트 클래스
모듈 테스트
테스트 특성을 만듭니다.
Test Method 특성
Test Class 특성
Test 모듈 특성
미리 정의 된 특성
CppUnitTestAssert.h
일반 가정
같은지
같지 않은
같은
동일 하지 않습니다.
Null 입니다
Null이 아님
True 입니다
False
실패
Windows 런타임 어설션
같은지
같은
같지 않은
동일 하지 않습니다.
Null 입니다
Null이 아님
예외 어설션
- 예외 예상
CppUnitTestLogger.h
Logger
메시지 쓰기
CppUnitTest.h
테스트 클래스와 메서드를 작성합니다
TEST_CLASS(className)
테스트 메서드가 포함된 각 클래스에 대해 필요합니다.테스트 클래스로 className 을 식별합니다.TEST_CLASS 는 namescape 범위에서 선언 되어야 합니다.
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 는 네임 스페이스 범위에서 선언 해야 하고 테스트 모듈에서 한 번만 정의될 수 있습니다.
테스트 특성을 만듭니다.
Test Method 특성
BEGIN_TEST_METHOD_ATTRIBUTE(testMethodName)
TEST_METHOD_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_METHOD_ATTRIBUTE()
테스트 메서드 testClassName 에 정의된 하나 이상의 TEST_METHOD_ATTRIBUTE 매크로 특성을 추가합니다.
TEST_METHOD_ATTRIBUTE 매크로는 이름이 attributeName 이고 attributeValue 인 값과 함께 특성을 정의합니다.
Test Class 특성
BEGIN_TEST_CLASS_ATTRIBUTE(testClassName)
TEST_CLASS_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_CLASS_ATTRIBUTE()
테스트 클래스에 testClassName 을 정의된 하나 이상의 TEST_CLASS_ATTRIBUTE 매크로 특성을 추가합니다.
TEST_CLASS_ATTRIBUTE 매크로는 이름이 attributeName 이고 attributeValue 인 값과 함께 특성을 정의합니다.
Test 모듈 특성
BEGIN_TEST_MODULE_ATTRIBUTE(testModuleName)
TEST_MODULE_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_MODULE_ATTRIBUTE()
테스트 모듈 testModuleName 에 정의된 하나 이상의 TEST_MODULE_ATTRIBUTE 매크로 특성을 추가합니다.
TEST_MODULE_ATTRIBUTE 매크로는 이름이 attributeName 이고 attributeValue 인 값과 함께 특성을 정의합니다.
미리 정의된 특성
이러한 미리 정의된 특성 매크로는 TEST_METHOD_ATTRIBUTE 매크로, TEST_CLASS_ATTRIBUTE 또는 위에서 설명한 TEST_MODULE_ATTRIBUTE 에 대해 대신 사용할 수 있습니다.
TEST_OWNER(ownerAlias)
Owner 이름의 특성과 ownerAlias 의 속성 값을 정의합니다.
TEST_DESCRIPTION(description)
Description 이름의 특성과 description 의 속성 값을 정의합니다.
TEST_PRIORITY(priority)
Priority 이름의 특성과 priority 속성값을 정의합니다.
TEST_WORKITEM(workitem)
WorkItem 이름의 특성과 workItem 속성값을 정의합니다.
TEST_IGNORE()
Ignore 이름의 특성과 true 속성값을 정의합니다.
CppUnitTestAssert.h
일반 가정
같은지
두 개체가 같은지 있는지 확인 하십시오.
template<typename T>
static void AreEqual(
const T& expected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
두 개의 double 값이 같음을 확인 합니다.
static void AreEqual(
double expected,
double actual,
double tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
두 개의 float가 같은지 확인 하십시오.
static void AreEqual(
float expected,
float actual,
float tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Char * 두 문자열이 같은지를 확인 합니다.
static void AreEqual(
const char* expected,
const char* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
w_char * 두 문자열이 같은지를 확인 합니다.
static void AreEqual(
const wchar_t* expected,
const wchar_t* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
같지 않은
두 개의 double 값이 같음을 확인 합니다.
static void AreNotEqual(
double notExpected,
double actual,
double tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
두 개의 float 값이 같음을 확인 합니다.
static void AreNotEqual(
float notExpected,
float actual,
float tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Char * 두 문자열이 다른지를 확인 합니다.
static void AreNotEqual(
const char* notExpected,
const char* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
w_char * 두 문자열이 다른지를 확인 합니다.
static void AreNotEqual(
const wchar_t* notExpected,
const wchar_t* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
두 개의 참조가 연산자 ==과 같지 않는지 확인합니다.
template<typename T>
static void AreNotEqual(
const T& notExpected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
같은
두 참조가 동일한 개체 인스턴스 (identity)를 참조 하는지 확인 합니다.
template<typename T>
static void AreSame(
const T& expected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
동일 하지 않습니다.
두 참조가 동일한 개체 인스턴스 (identity)를 참조하지 않는지 확인 합니다.
template<typename T>
static void AreNotSame (
const T& notExpected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Null 입니다
포인터가 NULL 인지 확인 합니다.
template<typename T>
static void IsNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Null이 아님
포인터는 NULL이 아닌 확인 하십시오.
template<typename T>
static void IsNotNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
True 입니다
조건이 true 인지 확인 합니다.
static void IsTrue(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
False
조건이 false 인지 확인합니다.
static void IsFalse(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
실패
테스트 사례 결과에 오류가 발생합니다.
static void Fail(
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Windows 런타임 어설션
같은지
두 개의 Windows 런타임 포인터 같지 않은지 확인 합니다.
template<typename T>
static void AreEqual(
T^ expected,
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
두 Platform::String ^ 문자열이 동일한지 확인합니다.
template<typename T>
static void AreEqual(
T^ expected,
T^ actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
같은
두 Windows 런타임 참조가 같은 개체를 참조 하는 확인합니다.
template<typename T>
static void AreSame(
T% expected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
같지 않은
두 개의 Windows 런타임 포인터 같지 않은지 확인 합니다.
template<typename T>
static void AreNotEqual(
T^ notExpected,
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
두 Platform::String ^ 문자열이 동일하지 않는지 확인합니다.
static void AreNotEqual(
Platform::String^ notExpected,
Platform::String^ actual,
bool ignoreCase = false,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
동일 하지 않습니다.
두 Windows 런타임 참조가 같은 개체를 참조하지 않는지 확인합니다.
template<typename T>
static void AreNotSame(
T% notExpected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Null 입니다
Windows 런타임 포인터는 nullptr 인지 확인 합니다.
template<typename T>
static void IsNull(
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Null이 아님
Windows 런타임 포인터는 nullptr이 아닌지 확인 합니다.
template<typename T>
static void IsNotNull(
T^ actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
예외 어설션
예외 예상
함수에서 예외가 발생하는지 확인 합니다.
template<typename _EXPECTEDEXCEPTION, typename _FUNCTOR>
static void ExpectException(
_FUNCTOR functor,
const wchar_t* message= NULL,
const __LineInfo* pLineInfo= NULL)
함수에서 예외가 발생하는지 확인 합니다.
template<typename _EXPECTEDEXCEPTION, typename _RETURNTYPE>
static void ExpectException(
_RETURNTYPE (*func)(),
const wchar_t* message= NULL,
const __LineInfo* pLineInfo = NULL)
CppUnitTestLogger.h
Logger
로거 클래스는 작성 하는 정적 메서드를 포함합니다.
class Logger
메시지 쓰기
static void
Logger::WriteMessage(const wchar_t* message)
static void
Logger::WriteMessage(const char* message)
예제
이 코드는 한 예입니다.
////////////////////////////////////////////////////////////
/* USAGE EXAMPLE
// The following is an example of VSCppUnit usage.
// It includes examples of attribute metadata, fixtures,
// unit tests with assertions, and custom logging.
#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");
}
};
참고 항목
개념
테스트 탐색기를 사용하여 기존 C++ 응용 프로그램 단위 테스트