Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单元测试C++;11封 < P> C++中有没有进行单元测试的优先权?< /P>_C++_Unit Testing_C++11_Closures - Fatal编程技术网

单元测试C++;11封 < P> C++中有没有进行单元测试的优先权?< /P>

单元测试C++;11封 < P> C++中有没有进行单元测试的优先权?< /P>,c++,unit-testing,c++11,closures,C++,Unit Testing,C++11,Closures,我编写的函数通常是在使用点附近定义的闭包,然后(可能)升级到完整的函数。这有助于保持接口干净,并使以线性方式读取代码变得更容易,但它会破坏编写单元测试 有没有任何技巧或C++单元测试框架可以处理,例如,一些计算函数的小函数,这些几何结构被定义为我的主体(?)p> TL;医生:否 为了对闭包进行单元测试,您必须给它一个可以引用的名称,方法是将它赋给一个变量 如果它足够复杂,需要单独进行单元测试,那么应该提取一个方法并进行测试 简而言之,您可以通过包含闭包的方法或函数间接地对闭包进行单元测试。我认为

我编写的函数通常是在使用点附近定义的闭包,然后(可能)升级到完整的函数。这有助于保持接口干净,并使以线性方式读取代码变得更容易,但它会破坏编写单元测试


有没有任何技巧或C++单元测试框架可以处理,例如,一些计算函数的小函数,这些几何结构被定义为我的主体(?)p> TL;医生:

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

如果它足够复杂,需要单独进行单元测试,那么应该提取一个方法并进行测试


简而言之,您可以通过包含闭包的方法或函数间接地对闭包进行单元测试。

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

例如

简言之,没有。但是

您可以测试使用闭包的代码。闭包被嵌入到源代码中,并且您没有任何反射机制,这一事实阻止了您对它们进行单元测试(但是您有很多方法来测试内容,不仅仅是单元测试),但是通常使用闭包的代码更紧凑,所以只要我们使用闭包测试整个块,使用闭包就可以了。我倾向于编写只需几行代码的闭包,实际上您可以创建一个函数(由闭包调用)并对函数本身进行单元测试;)


没有必要命名它,但是为了检索它,C++14允许返回lambda。是的,但是有什么意义呢?OP写的是闭包,闭包可以升级为函数。这意味着它们实际上并不关闭任何东西,它们只是匿名的局部函数。
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 */}); 
}
int function(MyClass *){ // unit test here

}

//...
void MyClass::method(){  // ... and unit test method
    auto f = [this] () { return function(this);};
    applyFunctorOnCollection(f);
}