导出gtest函数会导致测试失败

时间:2015-03-02 21:03:22

标签: c++ c++11 googletest

我正在尝试将常用功能编写到单独的dll中进行测试。当我这样做时,我会按预期得到测试失败的报告,但最终的报告会说测试通过了。

[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from MyFoo
[ RUN      ] MyFoo.fooTest
C:\Foo\Foo.cpp(2): error: Value of: false
  Actual: false
Expected: true
[       OK ] MyFoo.fooTest (0 ms)
[----------] 1 test from MyFoo(0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[  PASSED  ] 1 test.

正如您所看到的,测试失败了,但报告称它已通过。

这是我导出的函数的一个简单示例:

// Foo.dll

// Foo.h
FOO_EXPORT void Foo();

// Foo.cpp
#include <Foo.h>
#include <gtest/gtest.h>

void Foo()
{
    ::testing::UnitTest::GetInstance(); // 0x000007fecef5a590
    EXPECT_TRUE(false);
}

这是我的gtest可执行文件的一个简单示例:

// TestMyFoo.exe
#include <Foo.h>    
#include <gtest/gtest.h>

TEST(MyFoo, fooTest)
{
    ::testing::UnitTest::GetInstance(); // 0x000000003f9419d8
    Foo();
}

在导出Google测试时,我是否做错了什么?我甚至可以这样做(请说是)?

编辑:我认为部分问题与UnitTest单例有关。 我编辑了我的代码示例以更好地说明问题。指向UnitTest对象的指针应该是相同的但不是。知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:0)

正如AndreSassi在评论中所发表的那样。 GTest Primer FAQ解释说如果要将自己的DLL链接到主测试可执行文件,必须将gtest库编译为DLL。

我正在使用Visual Studio 2012,而FAQ提到的错误似乎不是问题。只是因为我没有将gtest构建为DLL。