2017-02-15 10 views
1

Microsoft :: VisualStudio :: CppUnitTestFramework을 사용하여 C++ 프로젝트 용 테스트 사례를 작성하고 있습니다. 여기에 다른 매개 변수로 동일한 테스트 케이스를 실행해야하는 경우가 있습니다.Microsoft :: VisualStudio :: CppUnitTestFramework의 매개 변수화 된 테스트 메서드

CPP 용 Nunit Framework에서 다음 코드로이 작업을 수행 할 수 있습니다.

[Test, SequentialAttribute] 
void MyTest([Values("A", "B")] std::string s) 
{ 

} 

이 매개 변수를 전달하면이 테스트는 2 번 실행됩니다.

MyTest("A") 
MyTest("B") 

마이크로 소프트 ::으로 VisualStudio :: CppUnitTestFramework 단위 테스트에서 이것을 달성하기 위해 비슷한 방법이 있나요.

도움이 매우 감사합니다.

답변

0

비슷한 문제점이 있습니다. 인터페이스와 여러 구현이 있습니다. 물론 인터페이스에 대한 테스트 만 작성하고 싶습니다. 또한 각 구현에 대한 테스트를 복사하고 싶지 않습니다. 따라서 필자는 테스트에 매개 변수를 전달하는 방법을 모색했습니다. 글쎄, 내 솔루션은 매우 예쁘지 않지만 그것은 간단하고 지금까지 내 유일한 사람입니다. 여기

내 문제에 대한 내 솔루션 (귀하의 경우 CLASS_UNDER_TEST에 당신이 시험에 통과 할 매개 변수 것)입니다 :

setup.cpp

#include "stdafx.h" 

class VehicleInterface 
{ 
public: 
    VehicleInterface(); 
    virtual ~VehicleInterface(); 
    virtual bool SetSpeed(int x) = 0; 
}; 

class Car : public VehicleInterface { 
public: 
    virtual bool SetSpeed(int x) { 
     return(true); 
    } 
}; 

class Bike : public VehicleInterface { 
public: 
    virtual bool SetSpeed(int x) { 
     return(true); 
    } 
}; 


#define CLASS_UNDER_TEST Car 
#include "unittest.cpp" 
#undef CLASS_UNDER_TEST 


#define CLASS_UNDER_TEST Bike 
#include "unittest.cpp" 
#undef CLASS_UNDER_TEST 

unittest.cpp

#include "stdafx.h" 
#include "CppUnitTest.h" 

#define CONCAT2(a, b) a ## b 
#define CONCAT(a, b) CONCAT2(a, b) 

using namespace Microsoft::VisualStudio::CppUnitTestFramework; 


TEST_CLASS(CONCAT(CLASS_UNDER_TEST, Test)) 
{ 
public: 
    CLASS_UNDER_TEST vehicle; 
    TEST_METHOD(CONCAT(CLASS_UNDER_TEST, _SpeedTest)) 
    { 
     Assert::IsTrue(vehicle.SetSpeed(42)); 
    } 
}; 

빌드에서 "unittest.cpp"를 제외해야합니다.