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

How to force correct order of expected and actual in Google Test?

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

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

这几乎没问题,但在测试失败的情况下会产生一些奇怪的错误消息,如:"the result of foo() was expected but actually it was 1"。这似乎是一个小问题,但有什么方法可以在编译时强制执行正确的预期和实际顺序?

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

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

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

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

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

ASSERT(EXPECTED, ACTUAL)

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