wyatt lindsey
wyatt lindsey

Reputation: 81

Within CPPUNIT_ASSERT, Keep Getting Access Violation

I have a set of classes to which I am trying to apply unit tests, to maintain their current utility through future revisions.

My problem is that within CPPUNIT, to which I am new, where-ever I call CPPUNIT_ASSERT ( [condition] ), I am met with Error Unhandled Exception...: Access Violation at 0xffffffffffffffff.

This happens even I write the simplest test case

int main(){
  CPPUNIT_ASSERT ( true );
}

I have tried calling my testing functions with manual calls, as well as adding them to a registry, as is done in the Money example. The problem reportedly arises within the constructor for SourceLine, as the filename string it expects is a bad pointer.

After a bit of a search I've found that this is called within the CPPUNIT_ASSERT, as it's a macro with the following definition

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

I've searched the tutorials on CppUnit's site, and scrutinised stackoverflow, but I have not found anything that addresses this in particular. I do find it strange that what is, in every example I've seen, a single-parameter function (assert), will call another function with no arguments (sourceline) that is actually another macro that is assuming it receives a string, but can receive no such thing. I found that SourceLine is a class that still has a default constructor, but above is called a macro, which really refers to the 2-parameter constructor, but is passed no arguments that I can see. I am at a loss.

I am using a 64 bit compilation of CppUnit, verified with a dumpbin, and Visual Studio 2008.

Upvotes: 3

Views: 549

Answers (1)

moggi
moggi

Reputation: 1486

Cppunit's assertion system uses macros so it is expected that your simple example complains about unhandled exception.

Normally you don't use an assertion outside of a test method. I suggest you have a look at the Cppunit Cookbook which provides some information and examples how to effectively use cppunit.

Upvotes: 1

Related Questions