0

我正在尝试为我的大学编写 C++ 教程。我尝试了所有可能的方法,例如在 catch.hpp 文件中导入 Catch 库,但我总是收到 TEST_CASE not found in scope 的错误。有人能帮我一下吗?我真的需要让它工作。

这是我的代码,

#include <iostream>
#include <fstream>
#include <string>

std::string FizzBuzz(int number) {
    if (number % 3 == 0 && number % 5 == 0) {
        return "FizzBuzz";
    } else if (number % 3 == 0) {
        return "Fizz";
    } else if (number % 5 == 0) {
        return "Buzz";
    } else {
        return std::to_string(number);
    }
}

int main() {
    TEST_CASE("FIZZ if div by 3", "[Fizz]") {
        REQUIRE(FizzBuzz(3) == "Fizz");
        REQUIRE(FizzBuzz(9) == "Fizz"); 
        REQUIRE(FizzBuzz(15) == "Fizz");    
    }
    
    TEST_CASE("BUZZ if div by 7", "[Buzz]") {
        REQUIRE(FizzBuzz(7) == "Buzz");
        REQUIRE(FizzBuzz(14) == "Buzz");    
        REQUIRE(FizzBuzz(35) == "Buzz");    
    }

    TEST_CASE("FIZZBUZZ if div by 3,7", "[Buzz]") {
        REQUIRE(FizzBuzz(21) == "FizzBuzz");
        REQUIRE(FizzBuzz(42) == "FizzBuzz");    
        REQUIRE(FizzBuzz(63) == "FizzBuzz");    
    }

    TEST_CASE("Return Num if div by 3,7", "[ReturnNum]") {
        REQUIRE(FizzBuzz(13) == "13");
        REQUIRE(FizzBuzz(17) == "17");  
        REQUIRE(FizzBuzz(24) == "24");  
    }

    return 0;
}

这是错误的屏幕截图:

在此处输入图像描述

4

1 回答 1

3

TEST_CASE不是您在函数中使用的东西,包括main(). 它是一个 Catch 预处理器宏,它创建一个测试用例,它可能是一个函数或一个类或其他东西。Catch 可以为您创建一个main()运行所有测试用例的工具。CATCH_CONFIG_MAIN通过仅在一个翻译单元中定义来做到这一点。您发布的代码也不显示 Catch 标头。

我还建议您更喜欢用于测试的CHECK而不是REQUIRE. REQUIRE在该点立即中止测试用例,因此它对于空指针检查等事情很有用。但在这种情况下,它掩盖了进一步的失败。这使您可以连续修复故障,而不是一次修复整个案例。

这是您的代码应如下所示:

#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
#include "catch.hpp"
#include <string>

std::string FizzBuzz(int number) {
    if (number % 3 == 0 && number % 5 == 0) {
        return "FizzBuzz";
    } else if (number % 3 == 0) {
        return "Fizz";
    } else if (number % 5 == 0) {
        return "Buzz";
    } else {
        return std::to_string(number);
    }
}

    TEST_CASE("FIZZ if divisible by 3", "[Fizz]") {
        CHECK(FizzBuzz(3) == "Fizz");
        CHECK(FizzBuzz(9) == "Fizz"); 
        CHECK(FizzBuzz(12) == "Fizz");    
    }
    
    TEST_CASE("BUZZ if divisible by 5", "[Buzz]") {
        CHECK(FizzBuzz(5) == "Buzz");
        CHECK(FizzBuzz(25) == "Buzz");    
        CHECK(FizzBuzz(35) == "Buzz");    
    }

    TEST_CASE("FIZZBUZZ if divisible by 3 and 5", "[FizzBuzz]") {
        CHECK(FizzBuzz(15) == "FizzBuzz");
        CHECK(FizzBuzz(45) == "FizzBuzz");    
        CHECK(FizzBuzz(60) == "FizzBuzz");    
    }

    TEST_CASE("Return Num if not divisible by 3 or 5", "[ReturnNum]") {
        CHECK(FizzBuzz(13) == "13");
        CHECK(FizzBuzz(17) == "17");  
        CHECK(FizzBuzz(26) == "26");  
    }

尝试Catch 教程以获取更多信息。

于 2021-08-02T20:32:43.010 回答