【问题标题】:How to force correct order of expected and actual in Google Test?如何在 Google 测试中强制预期和实际的正确顺序?
【发布时间】:2020-09-11 18:10:55
【问题描述】:

Google 测试断言ASSERT_* 应该以ASSERT_EQ(expected, actual) 的形式使用,其中第一个参数是预期值,第二个是实际值。但是我经常在现有的代码库中看到这些参数是相反的,就像在这段代码中一样:

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

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

【问题讨论】:

  • AFAIK - 新版本的 google-test 并非如此。我的意思是——在较新的版本中——这些方面都没有被视为预期的,也不是实际的。只需更新您的谷歌测试版本。

标签: c++ unit-testing googletest


【解决方案1】:

您可以使用来自 google mock 的 Hamcrest 匹配器:

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

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

【讨论】:

  • 谢谢,ASSERT_THAT(Eq(1), foo()); 确实无法编译。
【解决方案2】:

对我来说,避免有线消息的最好方法是从一开始就正确地做!

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

ASSERT(EXPECTED, ACTUAL)

如果其他开发人员正在阅读您的测试,他应该相信您过去已经正确完成了它。

【讨论】:

  • 这就是问题所在,你不能指望别人会正确地做到这一点。
  • 取决于 .... 在团队中工作并且团队同意时 ;-) 如果无法依赖他人,那么“Hamcrest 版本”也不会在其他人时工作只是不要这样做;-) 事实上,在最新的 Google 测试框架中,消息已经得到改进,当使用错误的参数顺序时,它们“并不太错”。
猜你喜欢
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 2020-04-25
  • 2022-07-20
  • 2015-05-29
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
相关资源
最近更新 更多