如何接受 std::experimental::any 参数的 gtest / gmock 函数?
How to gtest / gmock function accepting std::experimental::any argument?
问题
我需要帮助来修复 gtest 1.10.0 版本的单元测试问题。
当我尝试对接受 std::experimental::any 参数的函数进行单元测试时,抛出异常并终止单元测试。
重现问题的步骤
涵盖我的测试场景的单元测试片段在 https://godbolt.org/z/Y7dvEsaPf 下可用
在 TestBoth 测试用例中,如果 EXPECT_CALL 和实际函数调用相邻提供,则不会抛出异常并且测试用例执行成功。但是在我的实际项目代码中,我的测试函数调用了具有这两种数据类型的 send_data() 函数。
工具和操作系统版本
gtest 版本是 1.10.0
Ubuntu Linux 20.04
编译版本
g++ (Ubuntu 10.3.0-1ubuntu1~20.04) 10.3.0
C++14
构建系统
cmake 版本 3.20.5
其他上下文
需要帮助或请转至我可以询问并解决此问题的地方。
问题是 AnyMatcher
成功匹配任何 std::any
。解决方案是在 ::testing::InSequence
:
的帮助下强制进一步期望
TEST(MockUseWith, TestBoth)
{
TestMock mock;
InSequence seq;
EXPECT_CALL(mock, send_data(AnyMatcher(EnableReq{true})));
EXPECT_CALL(mock, send_data(AnyMatcher(ReadReq())));
mock.send_data(EnableReq{true});
mock.send_data(ReadReq{});
}
https://godbolt.org/z/eaj4Pxb1T
[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from MockUseWith
[ RUN ] MockUseWith.TestBoth
[ OK ] MockUseWith.TestBoth (0 ms)
[ RUN ] MockUseWith.TestOne
[ OK ] MockUseWith.TestOne (0 ms)
[----------] 2 tests from MockUseWith (0 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (1 ms total)
[ PASSED ] 2 tests.
问题
我需要帮助来修复 gtest 1.10.0 版本的单元测试问题。 当我尝试对接受 std::experimental::any 参数的函数进行单元测试时,抛出异常并终止单元测试。
重现问题的步骤
涵盖我的测试场景的单元测试片段在 https://godbolt.org/z/Y7dvEsaPf 下可用 在 TestBoth 测试用例中,如果 EXPECT_CALL 和实际函数调用相邻提供,则不会抛出异常并且测试用例执行成功。但是在我的实际项目代码中,我的测试函数调用了具有这两种数据类型的 send_data() 函数。
工具和操作系统版本 gtest 版本是 1.10.0 Ubuntu Linux 20.04
编译版本
g++ (Ubuntu 10.3.0-1ubuntu1~20.04) 10.3.0 C++14
构建系统
cmake 版本 3.20.5
其他上下文
需要帮助或请转至我可以询问并解决此问题的地方。
问题是 AnyMatcher
成功匹配任何 std::any
。解决方案是在 ::testing::InSequence
:
TEST(MockUseWith, TestBoth)
{
TestMock mock;
InSequence seq;
EXPECT_CALL(mock, send_data(AnyMatcher(EnableReq{true})));
EXPECT_CALL(mock, send_data(AnyMatcher(ReadReq())));
mock.send_data(EnableReq{true});
mock.send_data(ReadReq{});
}
https://godbolt.org/z/eaj4Pxb1T
[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from MockUseWith
[ RUN ] MockUseWith.TestBoth
[ OK ] MockUseWith.TestBoth (0 ms)
[ RUN ] MockUseWith.TestOne
[ OK ] MockUseWith.TestOne (0 ms)
[----------] 2 tests from MockUseWith (0 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (1 ms total)
[ PASSED ] 2 tests.