GMOCK - 如何在 return 类型为 void 时修改方法参数
GMOCK - how to modify the method arguments when return type is void
我有一个 class 接受指向另一个 class 的指针并且有一个方法 read():
class B:
{
public:
......
void read(char * str);
......
};
class A
{
public:
A(B *bobj):b(bobj);
B* b;
void read (char * str);
..........
};
我像下面这样调用对象
A * aobj = new A(new B());
现在我应该可以像下面这样访问 class 的读取方法了:
char text[100];
b->read(text)
aobj->read(text)
A 和 B 的读取方法 class 被编码为将一些值复制到提供的输入数组中。
如何编写函数的 MOCK 方法来将参数修改为特定值?
ON_CALL(*b, read(::testing::_)).WillByDefault(::testing::Return(outBuffer));
给我一个编译问题,因为读取方法不能 return 定义的值?
我已经使用Invoke函数来实现这个。这是示例代码。
如果你使用 >=c++11 然后,你可以简单地给 Invoke 函数一个 lambda。
#include <gtest/gtest.h>
#include <gmock/gmock.h>
using ::testing::Mock;
using ::testing::_;
using ::testing::Invoke;
class actual_reader
{
public:
virtual void read(char* data)
{
std::cout << "This should not be called" << std::endl;
}
};
void mock_read_function(char* str)
{
strcpy(str, "Mocked text");
}
class class_under_test
{
public:
void read(actual_reader* obj, char *str)
{
obj->read(str);
}
};
class mock_reader : public actual_reader
{
public:
MOCK_METHOD1(read, void(char* str));
};
TEST(test_class_under_test, test_read)
{
char text[100];
mock_reader mock_obj;
class_under_test cut;
EXPECT_CALL(mock_obj, read(_)).WillOnce(Invoke(mock_read_function));
cut.read(&mock_obj, text);
std::cout << "Output : " << text << std::endl;
// Lambda example
EXPECT_CALL(mock_obj, read(_)).WillOnce(Invoke(
[=](char* str){
strcpy(str, "Mocked text(lambda)");
}));
cut.read(&mock_obj, text);
std::cout << "Output : " << text << std::endl;
}
我有一个 class 接受指向另一个 class 的指针并且有一个方法 read():
class B:
{
public:
......
void read(char * str);
......
};
class A
{
public:
A(B *bobj):b(bobj);
B* b;
void read (char * str);
..........
};
我像下面这样调用对象
A * aobj = new A(new B());
现在我应该可以像下面这样访问 class 的读取方法了:
char text[100];
b->read(text)
aobj->read(text)
A 和 B 的读取方法 class 被编码为将一些值复制到提供的输入数组中。
如何编写函数的 MOCK 方法来将参数修改为特定值?
ON_CALL(*b, read(::testing::_)).WillByDefault(::testing::Return(outBuffer));
给我一个编译问题,因为读取方法不能 return 定义的值?
我已经使用Invoke函数来实现这个。这是示例代码。
如果你使用 >=c++11 然后,你可以简单地给 Invoke 函数一个 lambda。
#include <gtest/gtest.h>
#include <gmock/gmock.h>
using ::testing::Mock;
using ::testing::_;
using ::testing::Invoke;
class actual_reader
{
public:
virtual void read(char* data)
{
std::cout << "This should not be called" << std::endl;
}
};
void mock_read_function(char* str)
{
strcpy(str, "Mocked text");
}
class class_under_test
{
public:
void read(actual_reader* obj, char *str)
{
obj->read(str);
}
};
class mock_reader : public actual_reader
{
public:
MOCK_METHOD1(read, void(char* str));
};
TEST(test_class_under_test, test_read)
{
char text[100];
mock_reader mock_obj;
class_under_test cut;
EXPECT_CALL(mock_obj, read(_)).WillOnce(Invoke(mock_read_function));
cut.read(&mock_obj, text);
std::cout << "Output : " << text << std::endl;
// Lambda example
EXPECT_CALL(mock_obj, read(_)).WillOnce(Invoke(
[=](char* str){
strcpy(str, "Mocked text(lambda)");
}));
cut.read(&mock_obj, text);
std::cout << "Output : " << text << std::endl;
}