2012-11-03 8 views
1

먼저 만들어? 나는에 "예상 선언을 "와 같은 오류를 얻고있다는 CppUnit을 간단한 테스트

#include "ParserUnitTests.h" 

CPPUNIT_TEST_SUITE(ParserUnitTests); 

void ParserUnitTests::testCanDoUnitTest() { 
    CPPUNIT_ASSERT_EQUAL(1, 2, "Expected failure"); 
} 

CPPUNIT_TEST(ParserUnitTests::testCanDoUnitTest); 

:

# ParserUnitTests.h 
#include <cppunit\TestFixture.h>; 
#include <cppunit\extensions\HelperMacros.h> 

class ParserUnitTests : public CppUnit::TestFixture { 

public: 
    void testCanDoUnitTest(); 
}; 

및 해당 CPP :


그래서 지금은 그냥 아주 간단한 클래스를 생성 CPPUNIT_TEST_SUITE 라인 ... 내가 어디에서 왔는지와 매우 다른 것처럼 보입니다 ... 더 많은 현대 언어 ... JS/파이썬과 같습니다 ... 여기가 더 명백하게 보입니까? CppUnit에게 실행할 클래스/테스트 케이스를 알려줘야합니까? 좋아,하지만 오류의 원인은 무엇입니까?

CppUnit 요리 책의 코드는 주로 스 니펫이며 가져 오기가 무엇이고 어디로 가야하는지 파악하기가 쉽습니다. 아마도 누군가 나를 안내 할 수 있을까요?

#include "MyClass.hpp" 

struct callable 
{ 
    void operator()() 
    { 
    } 
}; 

class MyClassTest : public CppUnit::TestCase 
{ 
public: 
    void testEquality() 
    { 
    CPPUNIT_ASSERT(1 == 1); 
    } 

    void testCreation() 
    { 
    MyClass<callable>* tp = new MyClass<callable>(1); 
    CPPUNIT_ASSERT(tp->done() == true); 
    delete tp; 
    } 

    static CppUnit::Test* suite() 
    { 
    CppUnit::TestSuite* suiteOfTests = new CppUnit::TestSuite("MyClassTest"); 
    suiteOfTests->addTest(new CppUnit::TestCaller<MyClassTest>("testEquality", 
               &ThreadPoolTest::testEquality)); 
    return suiteOfTests; 
    } 
}; 

그리고 :

#include <cstdlib> 
#include <iostream> 
#include <limits> 
#include <cppunit/ui/text/TestRunner.h> 
#include <cppunit/XmlOutputter.h> 
#include <cppunit/TextOutputter.h> 
#include <cppunit/TestResult.h> 
#include <cppunit/TestResultCollector.h> 

#include "MyClass.hpp" 

int main(int argc, char** argv) 
{ 
    CppUnit::TextUi::TestRunner runner; 

    runner.addTest(MyClass::suite()); 

    runner.run(); 

    return (EXIT_SUCCESS); 
} 

일부 코드가 메인에서 누락되어 있지만 중요한 비트를 볼 수 있도록 내가 그것을 단순화

+0

컴파일러가 상수 앞에 parserUnitTests 함수의 선언을 원한다면 const보다 위에 함수를 이동하고 어떤 일이 발생하는지 확인하십시오. –

+0

포함 경로의 슬래시가 거꾸로 표시됩니다. – martinkunev

답변

2

코드를 약간 변경하면 코드가 작동합니다.

// ParserUnitTests.h 
#include <cppunit\TestFixture.h>; 
#include <cppunit\extensions\HelperMacros.h> 

class ParserUnitTests : public CppUnit::TestFixture { 

    CPPUNIT_TEST_SUITE(ParserUnitTest); 
    CPPUNIT_TEST(testCanDoUnitTest); 
    CPPUNIT_TEST_SUITE_END(); 

public: 
    void testCanDoUnitTest(); 
}; 

CPPUNIT_TEST_SUITE_REGISTRATION(ParserUnitTest); 

// ParserUnitTests.cpp 
#include "ParserUnitTests.h" 

void ParserUnitTests::testCanDoUnitTest() { 
    CPPUNIT_ASSERT_EQUAL(1, 2, "Expected failure"); 
} 

는 만 그래서 유일한 변화는 당신이 테스트를 선언 할 필요가 있다는 것입니다

// main.cpp 
#include <cppunit/extensions/TestFactoryRegistry.h> 
#include <cppunit/ui/text/TestRunner.h> 

int main() 
{ 
    CppUnit::TextUi::TestRunner runner; 
    CppUnit::TestFactoryRegistry &registry = CppUnit::TestFactoryRegistry::getRegistry(); 
    runner.addTest(registry.makeTest()); 
    bool wasSuccessful = runner.run(); 
    return !wasSuccessful; 
} 

(난 그냥 CppUnit을 요리 책에서 복사 한) 주 필요 TestFixture 선언 내부의 헤더 파일에 있습니다.

1

이 내가 CppUnit을를 사용하는 방법이다. 희망이 도움이됩니다.

+0

나는 며칠 동안 cppunit에서 일하고 있는데, 나는 작은 문제가있다. SUITE_REGISTRATION을 3 개 이상으로 등록하려면 어떻게하나요? i, e CPPUNIT_TEST_SUITE_REGISTRATION (ParserUnitTest) 및 CPPUNIT_TEST_SUITE_REGISTRATION (FormUnitTest)을 실행합니다. 이 모든 것을 하나의 XML 출력 파일로 결합하고 싶습니다. 개별 테스트 케이스가 정상적으로 작동합니다. 어떤 제안이라도 도움이 될 것입니다. – hanu