在CPPUNIT_ASSERT内,继续访问冲突

时间:2013-05-09 22:11:11

标签: access-violation unhandled-exception cppunit

我有一组我正在尝试应用单元测试的类,以便通过将来的修订来维护它们当前的实用程序。

我的问题是在CPPUNIT中,我是新手,无论我在哪里呼叫CPPUNIT_ASSERT([条件]),我都遇到错误未处理异常......:0xffffffffffffffffff上的访问冲突。

即使我编写最简单的测试用例

,也会发生这种情况
int main(){
  CPPUNIT_ASSERT ( true );
}

我尝试使用手动调用调用我的测试函数,以及将它们添加到注册表中,就像Money示例中所做的那样。据报道,问题出现在SourceLine的构造函数中,因为它期望的文件名字符串是一个错误的指针。

经过一些搜索,我发现这是在CPPUNIT_ASSERT中调用的,因为它是一个具有以下定义的宏

 #define CPPUNIT_ASSERT(condition)                                             \
  ( CPPUNIT_NS::Asserter::failIf( !(condition),                                \
                              CPPUNIT_NS::Message( "assertion failed",         \
                                                   "Expression: " #condition), \
                              CPPUNIT_SOURCELINE() ) )

我在CppUnit的网站上搜索了这些教程,并仔细检查了stackoverflow,但我没有发现任何特别解决这个问题的内容。我觉得奇怪的是,在我看过的每个例子中,单参数函数(断言)都将调用另一个没有参数的函数(sourceline),这实际上是另一个假设它接收字符串的宏,但是不能收到这样的东西。我发现SourceLine是一个仍然有默认构造函数的类,但上面称为宏,它实际上是指2参数构造函数,但是没有传递我能看到的参数。我很茫然。

我正在使用64位CppUnit编译,使用dumpbin和Visual Studio 2008进行验证。

1 个答案:

答案 0 :(得分:1)

Cppunit的断言系统使用宏,因此预期您的简单示例会抱怨未处理的异常。

通常,您不要在测试方法之外使用断言。我建议您查看Cppunit Cookbook,它提供了一些有关如何有效使用cppunit的信息和示例。