我在 MacOS maverick 上安装 unittest++,遇到此编译错误:
src/tests/TestXmlTestReporter.cpp
src/tests/TestCurrentTest.cpp
Linking TestUnitTest++...
Running unit tests...
:107: error: Failure in test: Expected 2 but was 0
FAILURE: 1 out of 174 tests failed (1 failures).
如何解决这个问题?我对旧版本的 MacOS 没有问题。
答案1
我遇到了这个问题。看起来 UnitTest++ 测试代码中有一个错误。它在 src/tests/TestTestRunner.cpp 中实现了许多模拟测试,但它们的 Test::RunImpl() 签名都错误。RunImpl 不需要参数,但模拟测试的 RunImpl 提供了对 TestResults 对象的引用。
例如在TestTestRunner.cpp的l25上:
virtual void RunImpl(TestResults& testResults_) const
{
for (int i=0; i < count; ++i)
{
if (asserted)
ReportAssert("desc", "file", 0);
else if (!success)
testResults_.OnTestFailure(m_details, "message");
}
}
但由于签名不匹配,所以应该是:
virtual void RunImpl() const
{
TestResults* testResults_ = CurrentTest::Results();
for (int i=0; i < count; ++i)
{
if (asserted)
ReportAssert("desc", "file", 0);
else if (!success)
testResults_->OnTestFailure(m_details, "message");
}
}
所以解决方案是以类似的方式修复所有的 RunImpl。
我不确定为什么/如何在早期的 OSX 平台上编译并成功运行。
更新:解决这个问题后,我发现实际上有一张未解决的票:http://sourceforge.net/p/unittest-cpp/bugs/23/- 但项目维护人员最近似乎不太活跃。