首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试C++11闭包

单元测试C++11闭包
EN

Stack Overflow用户
提问于 2015-10-27 17:12:50
回答 3查看 638关注 0票数 6

在C++闭包上做单元测试有没有先例?

我编写的函数通常以在其使用点附近定义的闭包的形式开始,然后(可能)在稍后过渡到完整的函数。这对于保持接口的整洁很好,并且使得以线性方式读取代码变得更容易,但是它破坏了单元测试的编写。

有没有什么技巧或C++单元测试框架可以处理,比如说,一些小函数,用于计算在我的main()中定义为闭包的几何图形?

EN

回答 3

Stack Overflow用户

发布于 2015-10-27 18:21:05

我认为你应该测试函数,而不是lambda函数。如果一个函数包含lambda函数,那么它们就是实现细节。如果您通过将lambda函数创建为变量来重用lambda函数,那么这些函数很容易作为函数进行单元测试。

例如:

代码语言:javascript
复制
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 */}); 
}
票数 5
EN

Stack Overflow用户

发布于 2015-10-27 18:04:32

TL;DR: No.

为了对闭包进行单元测试,您必须为闭包指定一个可以引用的名称,方法是将其赋给一个变量。

如果它足够复杂,无法单独进行单元测试,那么您应该提取一个方法并对其进行测试。

除此之外,您始终可以通过包含闭包的方法或函数间接地对闭包进行单元测试。

票数 2
EN

Stack Overflow用户

发布于 2015-10-27 21:16:23

简而言之,不是。但是..。

您可以测试使用闭包的代码。闭包被嵌入到源代码中,而你没有任何反射机制,这一事实阻止了你对它们进行单元测试(然而,你有很多方法来测试东西,不仅仅是单元测试),但是通常使用闭包的代码更紧凑,所以只要我们使用闭包测试整个代码块,使用它们就可以了。

代码语言:javascript
复制
int function(MyClass *){ // unit test here

}

//...
void MyClass::method(){  // ... and unit test method
    auto f = [this] () { return function(this);};
    applyFunctorOnCollection(f);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33363802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档