我可以用CatchTEST_CASE
保证多个s的执行顺序吗?我正在使用 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
在设置不方便的全局变量之前调用它,那么它们将不会被初始化并且测试将虚假地失败。