在C++闭包上做单元测试有没有先例?
我编写的函数通常以在其使用点附近定义的闭包的形式开始,然后(可能)在稍后过渡到完整的函数。这对于保持接口的整洁很好,并且使得以线性方式读取代码变得更容易,但是它破坏了单元测试的编写。
有没有什么技巧或C++单元测试框架可以处理,比如说,一些小函数,用于计算在我的main()中定义为闭包的几何图形?
发布于 2015-10-27 18:21:05
我认为你应该测试函数,而不是lambda函数。如果一个函数包含lambda函数,那么它们就是实现细节。如果您通过将lambda函数创建为变量来重用lambda函数,那么这些函数很容易作为函数进行单元测试。
例如:
auto lambda = [](/* params */){/* stuff */}; // this can be unit tested
void func() // this can be unit tested
{
// the lambda is an implementation detail of the function
sort(/* stuff */, [](/* params */){/* stuff */});
}发布于 2015-10-27 18:04:32
TL;DR: No.
为了对闭包进行单元测试,您必须为闭包指定一个可以引用的名称,方法是将其赋给一个变量。
如果它足够复杂,无法单独进行单元测试,那么您应该提取一个方法并对其进行测试。
除此之外,您始终可以通过包含闭包的方法或函数间接地对闭包进行单元测试。
发布于 2015-10-27 21:16:23
简而言之,不是。但是..。
您可以测试使用闭包的代码。闭包被嵌入到源代码中,而你没有任何反射机制,这一事实阻止了你对它们进行单元测试(然而,你有很多方法来测试东西,不仅仅是单元测试),但是通常使用闭包的代码更紧凑,所以只要我们使用闭包测试整个代码块,使用它们就可以了。
int function(MyClass *){ // unit test here
}
//...
void MyClass::method(){ // ... and unit test method
auto f = [this] () { return function(this);};
applyFunctorOnCollection(f);
}https://stackoverflow.com/questions/33363802
复制相似问题