Ctest.h文件。被测试的类
#pragma once
#include<iostream>
//被测试的类
class Ctest
{
public:
int testadd(int a, int b);
char Str();
void test();
};
#include "Ctest.h"
int Ctest::testadd(int a, int b)
{
return a + b;
}
char Ctest::Str()
{
return 'c';
}
void Ctest::test()
{
throw std::exception("Ctest exception.");
}
TestcaseSon.h文件。实现单元测试的类,继承自testcase中
#pragma once
#include "Poco/CppUnit/TestCase.h"
#include "Poco/CppUnit/TestCaller.h"
#include "Poco/CppUnit/TestSuite.h"
#include "Ctest.h"
//具有测试方法的测试类,继承与TestCase
class TestcaseSon :public CppUnit::TestCase
{
public:
TestcaseSon(const std::string& name);
~TestcaseSon();
void Tadd();
void Tstr();
void Tt();
void setUp();
void tearDown();
static CppUnit::Test* suite();
};
TestcaseSon.cpp文件。实现单元测试的类,继承自testcase中
#include"TestcaseSon.h"
TestcaseSon::TestcaseSon(const std::string& name) :CppUnit::TestCase(name)
{
}
TestcaseSon::~TestcaseSon()
{
}
void TestcaseSon::Tadd()
{
Ctest add;
int a = add.testadd(10, 20);
assert(30 ==a);//这个函数是获取发生错误的具体行数断言,注意:如果在代码中使用C ++宏“assert()”,或者包含assert.h,则可能与CppUnit的断言宏有名称冲突
//这可以通过将测试名称更改为“cu_assert()”在TestCase.h中得到补救。
//assertEquals(1.3, 1.3);
}
void TestcaseSon::Tstr()
{
Ctest str;
assert(str.Str()=='c');
}
void TestcaseSon::Tt()
{
Ctest tt;
try
{
tt.test();
fail("will not run");
}
catch (std::exception& )
{
}
}
void TestcaseSon::setUp()
{
}
void TestcaseSon::tearDown()
{
}
CppUnit::Test* TestcaseSon::suite()
{
//TestSuite这个类可以添加多个测试或者多个测试套件一起运行,下例是添加多个测试
CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TestcaseSonSuite");
CppUnit_addTest(pSuite, TestcaseSon, Tadd);
CppUnit_addTest(pSuite, TestcaseSon, Tstr);
CppUnit_addTest(pSuite, TestcaseSon, Tt);
return pSuite;
}
main文件,运行单元测试结果并打印
#include"Ctest.h"
#include "TestcaseSon.h"
#include "Poco/CppUnit/TestRunner.h"
#include "Poco/CppUnit/TextTestResult.h"
#include "Poco/CppUnit/TestSuite.h"
int main()
{
// 最终的suite,将其他suite都添加到里面来一起运行
CppUnit::TestSuite* Pstuite = new CppUnit::TestSuite("main");
Pstuite->addTest(TestcaseSon::suite());
// 如果有其他的suite(套件)也添加进来
//一个基于命令行的工具来运行测试
//TestRunner在执行测试后打印出结果
CppUnit::TestRunner TestRun;
TestRun.addTest("main", Pstuite);
std::vector<std::string> arg;//命令行参数
arg.push_back("drive");
arg.push_back("-all");
arg.push_back("-print");
TestRun.run(arg);
system("pause");
return 0;
}
打印结果如下:
TestcaseSon.h文件。实现单元测试的类,继承自testcase中