2017-02-15 41 views
1

私のC++プロジェクトのテストケースは、Microsoft :: VisualStudio :: CppUnitTestFrameworkを使って書いています。ここでは、異なるパラメータで同じテストケースを実行する必要があるケースがあります。Microsoft :: VisualStudio :: CppUnitTestFrameworkのパラメータ化されたテストメソッド

Nunit Framework for CPPでは、次のコードでこれを実現できます。

[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"をビルドから除外する必要があります。

関連する問題