4

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

在 Nunit Framework for CPP 中,我可以通过以下代码实现这一点。

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

}

通过传递这些参数,该测试将运行 2 次。

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

在Microsoft::VisualStudio::CppUnitTestFramework单元测试中是否有类似的方法来实现这一点。

非常感谢任何帮助。

4

3 回答 3

3

CppUnitTestFramework 不提供参数化测试,但没有什么可以阻止您简单地编写参数化函数并从测试中调用它。

void MyTest(char *param)
{
    // Actual test code here    
}

TEST_METHOD(MyTest_ParamA)
{
    MyTest("A");
}

TEST_METHOD(MyTest_ParamB)
{
    MyTest("B");
}
于 2019-03-24T03:08:37.230 回答
0

快速简单的解决方案:

在 TEST_METHOD_INITIALIZE 中使用您的测试用例创建一个向量,然后在每个测试用例中迭代该向量。

#include "stdafx.h"
#include "CppUnitTest.h"
#include <vector>

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace SomeTests
{
    TEST_CLASS(Some_Tests)
    {
    public:
        std::vector<int> myTestCases;

        TEST_METHOD_INITIALIZE(Initialize_Test_Cases)
        {
            myTestCases.push_back(1);
            myTestCases.push_back(2);
            myTestCases.push_back(3);
        }

        TEST_METHOD(Test_GreaterThanZero)
        {
            for (auto const& testCase : myTestCases)
            {
                Assert::IsTrue(testCase > 0);
            }
        }
    };
}
于 2019-06-20T16:36:01.507 回答
0

我有一个类似的问题:我有一个接口和它的几个实现。当然,我只想针对接口编写测试。另外,我不想为每个实现复制我的测试。因此,我寻找一种将参数传递给我的测试的方法。好吧,我的解决方案不是很漂亮,但它很简单,也是我迄今为止唯一想到的一个。

这是我的问题的解决方案(在您的情况下 CLASS_UNDER_TEST 将是您要传递给测试的参数):

安装程序.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

单元测试.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”。

于 2017-11-01T07:16:17.773 回答