c++ - C++ Catch 是否有类似 NUnit 的 TestCase 的功能,具有多个参数/输入选项

标签 c++ unit-testing catch-unit-test

NUnit 具有以下功能,您可以使用 TestCase 属性为测试指定不同的值。 Catch 有类似的东西吗?

[TestCase(12,3,4)]
[TestCase(12,2,6)]
[TestCase(12,4,3)]
public void DivideTest(int n, int d, int q)
{
  Assert.AreEqual( q, n / d );
}

我需要使用不同的数据值运行相同的单元测试,但每个单元测试都是不同的。我可以复制/粘贴 TEST_CASE/SECTION 并更改值,但是有没有像 NUnit 那样干净的方法来做到这一点。

我发现很难弄清楚要搜索什么。 Catch 使用 TEST_CASE 进行单元测试,这与 NUnit 调用的 TestCase 完全不同。

最佳答案

我无法找到与您正在寻找的内容相当的内容,但您根本不需要复制并粘贴所有内容:

#include "catch.hpp"

// A test function which we are going to call in the test cases
void testDivision(int n, int d, int q)
{
  // we intend to run this multiple times and count the errors independently
  // so we use CHECK rather than REQUIRE
  CHECK( q == n / d );
}

TEST_CASE( "Divisions with sections", "[divide]" ) {
  // This is more cumbersome but it will work better
  // if we need to use REQUIRE in our test function
  SECTION("by three") {
    testDivision(12, 3, 4);
  }
  SECTION("by four") {
    testDivision(12, 4, 3);
  }
  SECTION("by two") {
    testDivision(12, 2, 7); // wrong!
  }
  SECTION("by six") {
    testDivision(12, 6, 2);
  }
}

TEST_CASE( "Division without Sections", "[divide]" ) {
  testDivision(12, 3, 4);
  testDivision(12, 4, 3);
  testDivision(12, 2, 7); // oops...
  testDivision(12, 6, 2); // this would not execute because
                          // of previous failing REQUIRE had we used that
}

TEST_CASE ("Division with loop", "[divide]")
{
  struct {
    int n;
    int d;
    int q;
  } test_cases[] = {{12,3,4}, {12,4,3}, {12,2,7},
                    {12,6,2}};
  for(auto &test_case : test_cases) {
    testDivision(test_case.n, test_case.d, test_case.q);
  }
}

关于c++ - C++ Catch 是否有类似 NUnit 的 TestCase 的功能,具有多个参数/输入选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45037489/

相关文章:

c++ - Boost:触发并忘记异步函数调用?

c# - 使用 MBUnit 针对数据库测试值

c++ - boolean 数组的求和速度

c++ - 将 C++ 游戏部署到其他 Windows 机器

C++ 插件无法延迟加载 dll

C++ Catch Framework 处理C的assert?

unit-testing - 处理可选测试

javascript - karma.js 在基本 "karma init"设置后不返回任何结果

php - 使用抽象参数实例化对象

c++ - 无法编译 bool 连接