我有一组我正在尝试应用单元测试的类,以便通过将来的修订来维护它们当前的实用程序。
我的问题是在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进行验证。
答案 0 :(得分:1)
Cppunit的断言系统使用宏,因此预期您的简单示例会抱怨未处理的异常。
通常,您不要在测试方法之外使用断言。我建议您查看Cppunit Cookbook,它提供了一些有关如何有效使用cppunit的信息和示例。