我可以保证多个的执行顺序吗TEST_CASE
s with Catch https://github.com/philsquared/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 相关问题发布到赶上论坛 https://groups.google.com/forum/?fromgroups#!forum/catch-forum或问题列表GitHub http://catch-lib.net, 如果合适的话。
无论如何 - 我不知道你最后做了什么,但在这种情况下,听起来你只是想将每组断言分组为SECTION
s.
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(...));
}
}
然后,每个部分就像一个嵌入式测试用例(整个测试用例从头开始执行 - 通过所有初始化 - 对于每个部分)。因此,如果其中一个无抛出异常,它不会阻止其他部分的执行。
...除非初始化代码应该只执行一次 - 在这种情况下,您可以放入静态初始化程序,如@paddy建议的那样(一个在其构造函数中调用初始化程序的类 - 然后只需创建一个全局实例) - 或者您可以使用静态布尔值上的 if 来保护初始化代码块。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)