2017-02-15 71 views
1

我正在为我的C++项目编写一些测试用例,使用Microsoft :: VisualStudio :: CppUnitTestFramework。在这里,我有一个情况,我必须运行不同参数的相同测试用例。Microsoft :: VisualStudio中的参数化测试方法:: CppUnitTestFramework

在用于CPP的Nunit框架中,我可以通过以下代码实现此目的。

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

您将需要从build中排除“unittest.cpp”。