如何强制 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)
如果其他开发人员正在阅读您的测试,他应该相信您过去已经正确地完成了测试。
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)
如果其他开发人员正在阅读您的测试,他应该相信您过去已经正确地完成了测试。