如果我想设置一个类似的测试,那么首先是我使用的类。
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食谱中的代码主要是snipplet,很难弄清楚所需的进口是什么,应该去哪里......也许有人可以指导我?
答案 0 :(得分: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 ®istry = CppUnit::TestFactoryRegistry::getRegistry();
runner.addTest( registry.makeTest() );
bool wasSuccessful = runner.run();
return !wasSuccessful;
}
所以唯一的变化就是你需要在TestFixture声明中的头文件中声明测试套件。
答案 1 :(得分:1)
这就是我使用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);
}
主要部分缺少一些代码,但我对其进行了简化,因此您可以看到重要的部分。 希望这会有所帮助。