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.