gpt4 book ai didi

c++ - 捕获测试用例顺序

转载 作者:行者123 更新时间:2023-11-30 01:56:32 25 4
gpt4 key购买 nike

我可以保证多个 TEST_CASE 的执行顺序吗? s 与 Catch ?我正在使用 LLVM 测试一些代码,它们有一些我需要显式初始化的卑鄙的全局状态。

现在我有一个这样的测试用例:

TEST_CASE("", "") {
// Initialize really shitty LLVM global variables.
llvm::InitializeAllTargets();
llvm::InitializeAllTargetMCs();
llvm::InitializeAllAsmPrinters();
llvm::InitializeNativeTarget();
llvm::InitializeAllAsmParsers();
// Some per-test setup I can make into its own function
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile...));
CHECK_NOTHROW(Interpret(...));
CHECK_THROWS(Compile(...));
CHECK_THROWS(Compile(...));
}

我要的是重构成三个TEST_CASE ,

  • 一个用于应该通过编译的测试,
  • 一个用于应该失败的测试,以及
  • 一个用于应该通过解释的测试(并且在未来,可能会进一步划分)。

但我不能简单地将测试内容移动到另一个TEST_CASE因为如果那个 TEST_CASE在设置不方便的全局变量之前被调用,那么它们将不会被初始化并且测试将虚假地失败。

最佳答案

我来晚了一点,因为我才刚刚看到它 - 抱歉(如果合适,以后您可以将 Catch 相关问题发布到 Catch forumGitHub 上的问题列表。

无论如何 - 我不知道你最后做了什么,但在这种情况下,听起来你只是想将每组断言分组到 SECTION 中。

TEST_CASE() {
// Initialize really shitty LLVM global variables.
llvm::InitializeAllTargets();
llvm::InitializeAllTargetMCs();
llvm::InitializeAllAsmPrinters();
llvm::InitializeNativeTarget();
llvm::InitializeAllAsmParsers();

SECTION( "should pass compilation" ) {
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile(...));
CHECK_NOTHROW(Compile...));
}
SECTION( "should pass interpretation" ) {
CHECK_NOTHROW(Interpret(...));
}
SECTION( "Should fail compilation" ) {
CHECK_THROWS(Compile(...));
CHECK_THROWS(Compile(...));
}
}

然后每个部分就像一个嵌入式测试用例(整个测试用例从一开始就执行 - 通过所有初始化 - 对于每个部分)。因此,如果其中一个 no-throws 抛出,它不会阻止其他部分的执行。

...除非初始化代码只应执行一次 - 在这种情况下,您可以按照@paddy的建议放入静态初始化程序(一个在其构造函数中调用初始化程序的类 - 然后只需创建一个全局实例) - 或者您可以使用静态 bool 上的 if 来保护初始化代码块。

关于c++ - 捕获测试用例顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19694391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com