【问题标题】:How to test shared libraries with Google Test Framework如何使用 Google 测试框架测试共享库
【发布时间】:2013-07-11 17:12:38
【问题描述】:

原帖于googletestframework论坛。

我刚刚开始使用 Google C++ 测试框架,并且已经完成了示例。我正在使用 Linux、Eclipse 和 Linux GCC 工具链。我还在 Eclipse 中安装了 C/C++ 单元测试插件。

我有一个共享库项目,我正在尝试为其编写测试,但遇到了一个我无法解决的问题。为了测试我的共享库项目,我构建了一个单独的可执行项目并将我的测试放在这个项目中。

我添加了必要的包含路径和库,以便构建所有内容,但是当我尝试从链接到被测类的可执行项目中运行测试时,测试输出没有向我显示任何有意义的内容。这是一个例子。

这是我的测试类,可执行项目中名为 ChallengeResponsePacketTest.cpp 的文件(ChallengeResponsePacket 是我的共享库项目中的一个类)。

TEST(ChallengeResponsePacketTest, shouldSerializePacket) {
    const unsigned char SALT[] = {0x01, 0x02, 0x03};
    const char username[] = "daver";
    unsigned char buffer[100];

    ChallengeResponsePacket packet;
    packet.setSaltValue(SALT, sizeof(SALT));
    packet.setCompressionType(0);
    packet.setEncryptionType(0);
    packet.setUsername(username);
    int size = packet.serialize(buffer, sizeof(buffer));

    EXPECT_EQ(12, size);
    EXPECT_EQ(5, buffer[0]);
}

这是我得到的输出:

[----------] 1 test from ChallengeResponsePacketTest
[ RUN      ] ChallengeResponsePacketTest.shouldSerializePacket
gtest_test: ../src/ChallengeResponsePacket.cpp:34: virtual int tnp::ChallengeResponsePacket::serialize(unsigned char*, size_t) const: Assertion `_clientHashLength > 0' failed.
Aborted

您可以想象,C/C++ 单元测试插件不知道如何处理这个问题。

我没有得到通常漂亮的 Google 测试框架输出是否有某些原因?

我想我还有一个问题是,这是否是使用测试框架测试共享库代码的最佳方式?

谢谢,

【问题讨论】:

  • 在我看来图书馆正在抛出异常? “断言 `_clientHashLength > 0' 失败。”部分线路可能是异常信息?我不使用 Google Test,所以我不确定在引发意外异常时它的消息是什么样的。

标签: c++ googletest


【解决方案1】:

谢谢布雷特,

这为我指明了正确的方向。结果发现代码中有一些东西被抛出(或简单地失败了)。我不能确定它是什么,因为我重写了代码并且问题消失了。我有一个类似的问题,插件失败但没有错误,但在命令行上运行测试导致了 seg 错误错误消息。

我从事 Java 已经有很长时间了,现在才回到 C++。我想我已经习惯了更宽容的工具。

干杯, 戴夫。

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2012-05-15
    • 1970-01-01
    • 2014-12-03
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多