导出 gtest 函数会导致失败的测试通过
Exporting gtest functions cause failed tests to pass
我正在尝试将用于测试的常用功能编写到单独的 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 对象的指针应该相同,但事实并非如此。知道这里发生了什么吗?
正如 AndreSassi 在评论中所发表的那样。 GTest Primer FAQ 解释说,如果您想将自己的 DLL link 编译为主要测试可执行文件,则必须将 gtest 库编译为 DLL。
我使用的是 Visual Studio 2012,常见问题解答中提到的错误似乎不是问题。只是我没有将 gtest 构建为 DLL。
我正在尝试将用于测试的常用功能编写到单独的 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 对象的指针应该相同,但事实并非如此。知道这里发生了什么吗?
正如 AndreSassi 在评论中所发表的那样。 GTest Primer FAQ 解释说,如果您想将自己的 DLL link 编译为主要测试可执行文件,则必须将 gtest 库编译为 DLL。
我使用的是 Visual Studio 2012,常见问题解答中提到的错误似乎不是问题。只是我没有将 gtest 构建为 DLL。