3

我有一组类,我正在尝试对其应用单元测试,以通过未来的修订来保持它们当前的实用性。

我的问题是,在 CPPUNIT 中,我是新来的,无论我在哪里调用 CPPUNIT_ASSERT ( [condition] ),都会遇到错误未处理的异常...:0xffffffffffffffff 的访问冲突。

即使我编写最简单的测试用例也会发生这种情况

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是一个仍然有默认构造函数的类,但是上面称为宏,它实际上是指2参数构造函数,但是没有传递我可以看到的任何参数。我很茫然。

我正在使用 CppUnit 的 64 位编译,通过垃圾箱和 Visual Studio 2008 进行验证。

4

1 回答 1

1

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

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

于 2013-05-11T19:52:29.280 回答