CPPUNIT创建一个简单的测试

CppUnit creating a simple test

本文关键字:一个 简单 测试 创建 CPPUNIT      更新时间:2023-10-16

首先,如果我想设置类似:

的测试,则使用了什么类
class MyClassTests 
    setup()
    teardown()
    testDoingSomething()
    testDoingA()

似乎要使用的课程是测试套件吗?


所以现在我创建了一个非常简单的类:

# ParserUnitTests.h
#include <cppunitTestFixture.h>;
#include <cppunitextensionsHelperMacros.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食谱中的代码主要是snipplet,很难弄清楚所需的进口,应该去什么?也许有人可以指导我?

带有一些小更改,您的代码应起作用。

// ParserUnitTests.h
#include <cppunitTestFixture.h>;
#include <cppunitextensionsHelperMacros.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声明中的标头文件中声明测试套件。

这就是我使用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);
}

主中缺少一些代码,但我简化了它,因此您可以看到重要的位。希望这会有所帮助。

相关文章: