我有一组类,我正尝试对其应用单元测试,以在未来的修订中保持它们当前的效用。
我的问题是,在我刚接触的 CPPUNIT 中,无论我在哪里调用 CPPUNIT_ASSERT([条件]),我都会遇到错误未处理的异常...: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),它实际上是另一个假设它接收字符串的宏,但是不能收到这样的东西。我发现 SourceLine 是一个仍然有默认构造函数的类,但上面称为宏,它实际上引用了 2 参数构造函数,但没有传递任何我能看到的参数。我很茫然。
我使用的是 CppUnit 的 64 位编译,使用 dumpbin 和 Visual Studio 2008 进行了验证。
最佳答案
Cppunit 的断言系统使用宏,因此预计您的简单示例会提示未处理的异常。
通常您不会在测试方法之外使用断言。我建议你看看 Cppunit Cookbook其中提供了一些如何有效使用 cppunit 的信息和示例。
关于access-violation - 在 CPPUNIT_ASSERT 中,继续获取访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16471978/