gmock中的DoAll
时间: 2024-05-04 16:20:20 浏览: 17
DoAll是gmock中的一个函数,用于将多个动作组合在一起执行。可以用于在期望调用时执行多个操作,例如修改参数、返回值、打印日志等。
DoAll的语法是:
```
ACTION_P(DoAll, actions) { ... }
```
其中,actions是一个可变参数模板,每个参数都是一个动作(Action)。在函数体中,可以通过std::tuple和std::apply来执行这些动作。
示例代码:
```
using ::testing::_;
using ::testing::DoAll;
using ::testing::SaveArg;
int foo(int* a, int* b) {
*a = 1;
*b = 2;
return 3;
}
TEST(FooTest, Test1) {
int a, b, c;
EXPECT_CALL(mock, Bar(_, _))
.WillOnce(DoAll(SaveArg<0>(&a), SaveArg<1>(&b), Return(4)));
c = foo(&a, &b);
EXPECT_EQ(3, c);
}
```
在这个例子中,我们定义了一个函数foo,它的参数是两个指针,返回一个整数。我们想要测试它是否正确地修改了这两个指针的值。我们使用gmock来模拟这个函数的调用,在模拟的调用中,我们使用DoAll来保存参数并返回一个值。
在EXPECT_CALL中,我们使用SaveArg来保存参数0和参数1的值,使用Return来返回一个值4。在实际调用时,我们会调用foo函数,它会修改参数a和b的值,但是返回值仍然是3。我们在测试中使用EXPECT_EQ来验证返回值是否正确,验证参数a和b是否被正确地修改。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)