CppUnit создает простой тест

Во-первых, какой класс я использую, если хочу настроить тест, например:

class MyClassTests 
    setup()
    teardown()
    testDoingSomething()
    testDoingA()

Похоже, что класс для использования TestSuite?


Итак, теперь я только что создал очень простой класс:

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

class ParserUnitTests : public CppUnit::TestFixture {

public:
    void testCanDoUnitTest();
};

И соответствующий ему cpp:

#include "ParserUnitTests.h"

CPPUNIT_TEST_SUITE(ParserUnitTests);

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

CPPUNIT_TEST(ParserUnitTests::testCanDoUnitTest);

Я получаю такие ошибки, как "ожидается объявление" в строке CPPUNIT_TEST_SUITE... похоже, это сильно отличается от того, откуда я родом... более современные языки... например, JS/Python... похоже здесь более явно? Я должен сообщить CppUnit, какие классы/тестовые случаи запускать? Хорошо, но что вызывает ошибки?

Код в поваренной книге CppUnit в основном состоит из фрагментов, и трудно понять, что требуется для импорта и что куда следует помещать ... возможно, кто-то может мне помочь?


person Jiew Meng    schedule 03.11.2012    source источник
comment
возможно, компилятор хочет, чтобы функция parserUnitTests была объявлена ​​перед константой, попробуйте переместить функцию выше константы и посмотреть, что произойдет.   -  person Syntactic Fructose    schedule 03.11.2012
comment
Косые черты в ваших включенных путях обратные.   -  person martinkunev    schedule 07.06.2017


Ответы (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");
}

тогда вам нужен только основной (который я скопировал только что из кулинарной книги Cppunit)

// 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;
}

Таким образом, единственное изменение заключается в том, что вам нужно объявить набор тестов в заголовочном файле внутри объявления TestFixture.

person moggi    schedule 03.11.2012

Вот как я использую 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);
}

Некоторый код отсутствует в основном, но я упростил его, чтобы вы могли видеть важные фрагменты. Надеюсь это поможет.

person Damien T    schedule 03.11.2012
comment
Я работаю над cppunit несколько дней, у меня есть небольшая проблема. Как зарегистрировать 3 или более SUITE_REGISTRATION в одном . i,e CPPUNIT_TEST_SUITE_REGISTRATION(ParserUnitTest) и CPPUNIT_TEST_SUITE_REGISTRATION(FormUnitTest) и продолжается. Я хочу объединить все это в один выходной XML-файл. Отдельные тестовые случаи работают нормально. Любые предложения будут полезны. - person Hanu; 27.12.2013