C++ 如何在Google测试中强制正确的预期和实际顺序?

C++ 如何在Google测试中强制正确的预期和实际顺序?,c++,unit-testing,googletest,C++,Unit Testing,Googletest,谷歌测试断言ASSERT.*应该以ASSERT.\u EQ(预期,实际)的形式使用,其中第一个参数是预期值,第二个是实际值。但我经常在现有的代码库中看到,这些参数是反向的,如下代码所示: TEST(test, test) { ASSERT_EQ(foo(), 1); } 这几乎没问题,但在测试失败的情况下,它会产生一条有点奇怪的错误消息,如:“预期的结果是foo(),但实际上是1”。这似乎是一个小问题,但有没有办法在编译时强制要求预期和实际的正确顺序?您可以使用google m

谷歌测试断言
ASSERT.*
应该以
ASSERT.\u EQ(预期,实际)
的形式使用,其中第一个参数是预期值,第二个是实际值。但我经常在现有的代码库中看到,这些参数是反向的,如下代码所示:

TEST(test, test)
{
    ASSERT_EQ(foo(), 1);    
}

这几乎没问题,但在测试失败的情况下,它会产生一条有点奇怪的错误消息,如:“预期的结果是
foo()
,但实际上是
1
”。这似乎是一个小问题,但有没有办法在编译时强制要求预期和实际的正确顺序?

您可以使用google mock的Hamcrest matchers:

ASSERT_THAT(foo(), Eq(1) );

这提高了参数的可读性和强制顺序。

对我来说,避免有线消息的最佳方法是,从一开始就正确执行

好的,这对现有的错误编写的测试没有帮助,但是在我所知道的所有单元测试框架(C#,Java,C++)中,它总是一样的:

ASSERT(EXPECTED, ACTUAL)

如果另一个开发人员正在阅读您的测试,他应该相信您在过去正确地完成了测试。

AFAIK-这不是新版本谷歌测试的情况。我的意思是,在新的版本中,这些方面没有一个被视为只是预期的,也没有一个是实际的。只需更新您的google测试版本。谢谢,
ASSERT_THAT(Eq(1),foo())确实无法编译。这就是问题所在,你不能指望其他人会正确编译。这取决于。。。。在团队中工作且团队同意时;-)如果不可能依赖他人,那么当其他人不这样做时,“Hamcrest版本”也不会起作用;-)事实上,在最新的谷歌测试框架中,这些信息得到了改进,当参数顺序错误时,它们“不会太错”。