2017-02-15 2 views
1

Ich schreibe einige Testfälle für mein C++ Projekt mit Microsoft :: VisualStudio :: CppUnitTestFramework. Hier habe ich einen Fall, in dem ich denselben Testfall mit verschiedenen Parametern ausführen muss.Parametrisierte Testmethode in Microsoft :: VisualStudio :: CppUnitTestFramework

In Nunit Framework für CPP kann ich dies mit dem folgenden Code erreichen.

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

} 

Durch diese Parameter wird dieser Test 2 Mal ausgeführt.

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

Gibt es eine ähnliche Art und Weise dies in Microsoft :: Visual Studio :: CppUnitTestFramework Unit-Test zu erreichen.

Jede Hilfe wird sehr geschätzt.

Antwort

0

Ich hatte ein ähnliches Problem: Ich habe eine Schnittstelle und mehrere Implementierungen davon. Natürlich möchte ich nur Tests gegen die Schnittstelle schreiben. Außerdem möchte ich meine Tests nicht für jede Implementierung kopieren. Daher habe ich nach einer Möglichkeit gesucht, Parameter an meinen Test zu übergeben. Nun, meine Lösung ist nicht sehr hübsch, aber es ist einfach und die einzige, die ich bis jetzt gefunden habe.

Hier ist meine Lösung für mein Problem (in Ihrem Fall CLASS_UNDER_TEST der Parameter Sie in den Test bestehen wollen würde):

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

Sie müssen „unittest.cpp“ von Build auszuschließen.