我看到该功能的文档似乎非常重要,因为它在Google测试概述功能中并详细介绍:https:
//github.com/google/googletest/blob/master/googletest/docs/advanced.md#death-tests
它们看起来像标准,assert()
但它们是Google Test的一部分,因此是一个xUnit测试框架.因此,我想知道使用这些死亡测试的真正用途或优点是什么.
我在使用PCL和Google Test(GTest)的自定义重载'=='运算符时遇到问题
#include <pcl/point_types.h>
namespace pcl { struct PointXYZ; }
bool operator==(pcl::PointXYZ p1, pcl::PointXYZ p2) {return p1.x-p2.x<.1;}
#include <gtest/gtest.h>
TEST(Foo, bar) {
pcl::PointXYZ a{2,3,4};
pcl::PointXYZP b{2,3,4};
EXPECT_EQ(a,b); // Compile error no match for operator==
}
int main(int argc, char **argv){
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
|| /usr/include/gtest/gtest.h: In instantiation of 'testing::AssertionResult testing::internal::CmpHelperEQ(const char*, const char*, const T1&, const T2&) [with T1 = pcl::PointXYZ; T2 = pcl::PointXYZ]':
/usr/include/gtest/gtest.h|1361 col 23| required from 'static testing::AssertionResult testing::internal::EqHelper<lhs_is_null_literal>::Compare(const char*, const char*, const T1&, …
Run Code Online (Sandbox Code Playgroud) Google搜索会生成Google Test的GitHub页面.我在网上找到了许多链接到https://github.com/google/googletest,现在重定向到GitHub页面.GitHub项目有一个概述和一个readme.md,主要解释了如何构建Google Test.
Google Test的官方用户文档在哪里,或者一些同样有用的综合文档?
我目前正在使用googles单元测试框架为嵌入式应用程序编写单元测试.现在我的老板很不高兴我测试的数据(即我调用被测试类的方法的值)在测试中是硬接线的.他要求从文件中读取此数据.他的论点是,为一个以前被遗忘的角落案件添加另一个测试会更容易.我不是单位测试的经验,但到目前为止,我不是这样做的.所以我试着弄清楚最好的方法是什么 - 即使这样做是个好主意.我很快就遇到了DDT(数据驱动测试)方法.
谷歌单元测试框架有一个他们称之为" 价值参数化测试 "的功能.有了它,我的测试夹具成为模板类,我可以传入参数.但是,我看到了一些问题:
我会想象像谷歌测试框架那样成熟的东西让它变得更容易.但是,他们写道
值参数化测试很方便[当]你想通过各种输入(又称数据驱动测试)测试你的代码.此功能很容易被滥用,所以请在锻炼时锻炼你的良好感觉!
此外还有这篇博客文章TotT:Data Driven Traps,也警告我(滥用)数据驱动的单元测试.
所以我的问题归结为:
我并不是真的要googletest,而且基本上可以自由选择任何我喜欢的框架.
编辑
我在googletest常见问题解答的FAQ条目中找到了以下声明
一般来说,Google Test对数据驱动的测试还没有很好的支持.我们希望很快能够在这方面做出改进.
我需要使用Microsoft.Office.Interop.Word命名空间来提取Word文档是否包含宏以及哪些宏.与其他.Net类的文档相比,此命名空间的MSDN文档没有提供太多信息.我在哪里可以获得有关此命名空间的更多信息(示例,完整文档等).我已经搜索过Google和SO,但没有太多信息.
有一些页面解释了如何直接使用XCode与gtest(例如https://github.com/google/googletest/blob/master/googletest/docs/XcodeGuide.md),但我希望能够从cmake开始并获得完全整合的结果.Cmake允许一个人生成XCode项目.我希望生成的XCode项目能够正确地集成测试(例如,如果测试失败,显示源中位置的输出应该是该源代码位置的可点击快捷方式).怎么做到这一点?
到目前为止,我已经成功地获得了XCode/gtest项目(参见/sf/answers/1823588581/),但没有获得可点击的输出.
所以,我有以下代码。无论 Interpolator 类的细节是什么,在这种情况下它都不应该抛出异常,这就是我想要测试的。
TEST(errorhandlingInterpolator, toolargeInput) {
const size_t numSamples = 100000;
std::array<double, numSamples> bf{{0.0, 0.5, 1.0, 0.0, 0.5, 0.0}};
std::array<double, numSamples> ts{{0.0, 0.0, 0.0, 0.5, 0.5, 1.0}};
std::array<double, numSamples> current{ {0.13, 0.83, 0.96, 0.22, 0.30, 0.54} };
ASSERT_NO_THROW( [&](){
Interpolator<double, double, double, numSamples> intp(bf, ts, current);
});
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我收到以下错误(使用或不使用 lambda 函数)。在之前遇到相同的错误后,我将构造函数调用包装在 lambda 中。
.../test/main.cpp:34: error: macro "ASSERT_NO_THROW" passed 4 arguments, but takes just 1
});
^
Run Code Online (Sandbox Code Playgroud)
这不是一个破坏交易的问题。我可以将我的代码包装在一个“正常”函数中,该函数本身可以返回 AssertionSuccess() 或 AssertionFailure(),然后可以在断言中进行检查,但这似乎不太好。
从我使用 CATCH 测试框架的经验来看,可以直接在宏中使用 REQUIRE_NOTHROW() 测试构造函数中的异常。甚至 lambda 也是不必要的。
如果我在使用谷歌测试框架时没有犯错误,我会感到惊讶。
我浏览了以下两个文档来寻找我的问题的解决方案,但似乎没有提及它。
https://github.com/google/googletest/blob/master/googletest/docs/advanced.md …