如何在谷歌测试中测试方法,使用std::function
How to test method in google test, using std::function?
我想在类 A 中测试方法 "methodToTest":
typedef std::function F_global;
struct A
{
F_global m_F_global;
A(F_global m_F_global) : p_F_global(m_F_global) {}
void methodToTest()
{
m_F_global(5);
}
};
我有一个模拟课:
类运行模拟{公共: MOCK_METHOD1(运行,无效(整数));};
下面我有一个测试用例:
class TestClass : public testing::Test
{
protected:
void SetUp();
std::unique_ptr<A> m_aa;
std::unique_ptr<RunMock> m_runMock;
};
void UecSimplePortTestSuite::SetUp()
{
m_aa = make_unique<A>(m_runMock->run);//IT DOESN'T WORK I DON'T KNOW HOW TO FORWARD A METHOD run from RunMock to constructor
}
TEST_F(UecSimplePortTestSuite, testForwardMessage)
{
EXPECT_CALL(*m_runMock, run(_));
m_aa->methodToTest();
}
通常我不知道如何在"UecSimplePortTestSuite::SetUp()"中从模拟类"RunMock"转移方法"运行"。我想这样做,因为我想在UecSimplePortTestSuite.testForwardMessage中"EXPECT_CALL(*m_runMock,run(_));"来测试"methodToTest()"。我认为好主意可能是使用lmbda,std::boost::bind 或类似的东西。
您可以在SetUp()
中将 lambda 传递给 A
的构造函数:
m_runMock.reset( new RunMock );
m_aa.reset( new A( [&](int value){ m_runMock->run(value); } );
这:
m_runMock->run
不会做你的事情,这是一个编译错误。您可以阅读此移位 QA 以及此处如何使用指向成员函数的指针。
相关文章:
- 使用std::multimap迭代器创建std::list
- 使用std::vector的OpenCL矩阵乘法
- 使用std::函数映射对象方法
- 使用"std::unordereded_map"映射到"std::list"对象
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用std::source_location报告错误的最佳实践
- 如何使用 std::累积在 C++ 中计算总和立方体
- 在一个模板函数中,若输入的类型是enum类,我该如何使用std::underlying_type
- 有效地使用std::unordered_map来插入或增加键的值
- 使用std::list创建循环链表
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 使用std::mt19937从字符串中返回一个随机单词
- 使用std::istream::peek()总是安全的吗
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 在template中使用std::variant的template函数
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 为什么在C++20中对lambdas使用"std::bind_front"
- 如何使用std::min和std::less返回对象
- 使用 std::string () const 函数启动线程或未来
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>