我的googletest具有以下结构:
void
check(Arg a1, Arg a2)
{
EXPECT_TRUE(a1 == a2);
}
TEST(s, t)
{
a1 = make_arg1();
a2 = make_arg2();
check(a1, a2);
a11 = make_arg1();
a22 = make_arg2();
check(a11, a22);
...... many other check() calls ......
}
现在当测试失败时,错误打印输出只显示check()的源代码行,而不是TEST()行。
我所知道的唯一解决方案是使用SCOPED_TRACE,如下所示:
TEST(s, t)
{
SCOPED_TRACE("100");
a1 = make_arg1();
a2 = make_arg2();
check(a1, a2);
SCOPED_TRACE("200");
a11 = make_arg1();
a22 = make_arg2();
check(a11, a22);
...... many other check() calls ......
}
但添加所有SCOPED_TRACE有点乏味,这里有更好的解决方案吗?
答案 0 :(得分:1)
如果检查是否相等,最好使用from hypothesis import given
from hypothesis.strategies import lists, integers
@given(integers(min_value=0, max_value=5).flatmap(lambda n: lists(lists(integers(min_value=1, max_value=5), min_size=n, max_size=n), min_size=1, max_size=50)))
def test(l):
# ...
而不是EXPECT_EQ
。如果您的EXPECT_TRUE
只包含这一行,那么请不要使用函数,只需在测试中使用check()
。
如果您的EXPECT_EQ
功能更复杂且您不想复制&粘贴,你总是可以使用宏而不是函数。
答案 1 :(得分:0)
我可能会编写一个宏来打包check
以添加SCOPED_TRACE
。另外,我认为您当前使用SCOPED_TRACE
的方式可能会为每个实例添加跟踪。
也许尝试类似的事情:
#define CHECK(msg, ...) \
do { SCOPED_TRACE(msg); check(__VA_ARGS__); } while(0)
如果您只想要行号并且不需要额外信息,也可以将msg
替换为""
。