access-violation - 在 CPPUNIT_ASSERT 中,继续获取访问冲突

标签 access-violation unhandled-exception cppunit

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

我的问题是,在我刚接触的 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/

相关文章:

c++ - 使用 CppUnit 进行内存泄漏检测

c - 我正在练习在 C 中使用链接列表和节点,并且在运行时不断收到 "Unhandled Exceptions"

opencv - 0x10012c5d(highgui110.dll)的未处理异常

c# - C# 控制台应用程序中未处理的异常导致 AppCrash

c++ - 在 Windows 中安装最新的 cppunit

c++ - 在 C++ 中管理集成测试

c++ - 调用基类方法时访问冲突

c++ - 链表访问冲突

c++ - 具有 ifstream 成员的内部类的构造函数返回无效的 fstream

c++ - 第一次异常发生在 ... : Access violation reading location . .. 使用 Visual Studio 2010 进行调试时