Unit testing 在UnitTest++;?
我有一个UnitTest++测试类,它允许我测试一个类是否正确解析了一些字符串。在运行测试之前,我创建了一个fixture,其中包含几个字符串,这些字符串将由循环中的各种函数进行测试。它似乎工作正常,但问题是,在发生错误的情况下,UnitTest++总是给我相同的错误行,所以我不知道到底是哪个字符串导致了问题 例如,它将输出:Unit testing 在UnitTest++;?,unit-testing,loops,fixture,unittest++,Unit Testing,Loops,Fixture,Unittest++,我有一个UnitTest++测试类,它允许我测试一个类是否正确解析了一些字符串。在运行测试之前,我创建了一个fixture,其中包含几个字符串,这些字符串将由循环中的各种函数进行测试。它似乎工作正常,但问题是,在发生错误的情况下,UnitTest++总是给我相同的错误行,所以我不知道到底是哪个字符串导致了问题 例如,它将输出: "[UnitTest++] ..\trunk\tests\Test_ChineseUtil.cpp(46): error: Failure in ParsePinyinT
"[UnitTest++] ..\trunk\tests\Test_ChineseUtil.cpp(46): error: Failure in ParsePinyinT: ChineseUtil::parsePinyinT(pinyinT) == pinyinN"
但这并不能告诉我哪个字符串没有被正确解析
因此,我希望在测试失败时设置一些自定义错误消息(在这种特定情况下,我将给它数组中的第一项)。基本上,我需要这样的东西:
CHECK(theTest, "my error message")
UnitTest++中有这样的函数吗?或者也许有更好的方法来做我想做的事
有关信息,请参阅我的课程代码:
#include <third_party/unittest++/UnitTest++.h>
#include <Application.h>
#include <ChineseUtil.h>
using namespace hanzi;
namespace chineseUtilTests {
class PinyinFixture {
public:
PinyinFixture() {
ChineseUtil::initialize();
testData << "third tone" << QString::fromUtf8("wo3") << QString::fromUtf8("wǒ");
testData << "no tone" << QString::fromUtf8("wo") << QString::fromUtf8("wo");
testData << "second tone" << QString::fromUtf8("guo2") << QString::fromUtf8("guó");
testData << "first tone" << QString::fromUtf8("jia1") << QString::fromUtf8("jiā");
testData << "fifth tone" << QString::fromUtf8("jia5") << QString::fromUtf8("jia");
testData << "two dots" << QString::fromUtf8("nu:") << QString::fromUtf8("nü");
testData << "two dots and tone" << QString::fromUtf8("nu:3") << QString::fromUtf8("nǚ");
}
~PinyinFixture() {
}
QStringList testData;
};
TEST_FIXTURE(PinyinFixture, ParsePinyinN) {
for (int i = 0; i < testData.size(); i++) {
QString pinyinN = testData[i][1];
QString pinyinT = testData[i][2];
CHECK(ChineseUtil::parsePinyinN(pinyinN) == pinyinT);
}
}
TEST_FIXTURE(PinyinFixture, ParsePinyinT) {
for (int i = 0; i < testData.size(); i++) {
QString pinyinN = testData[i][1];
QString pinyinT = testData[i][2];
CHECK(ChineseUtil::parsePinyinT(pinyinT) == pinyinN);
}
}
} // chineseUtilTests
#包括
#包括
#包括
使用汉字;
名称空间chineseUtilTests{
类销轴夹具{
公众:
PinyinFixture(){
ChineseUtil::initialize();
testData如果您的类有一个相等运算符,您应该能够,而不是键入
CHECK(something == something_else);
使用
您的类允许使用==
这一事实让我觉得您可以这样做。如果测试失败,您应该按照“期望的东西,但得到了其他东西”的思路获得一些东西
如果你需要更多的信息,你可以做一些其他的事情
一种是在测试中添加您自己的自定义输出。如果您特别需要知道i
的值,您可以在每次检查之前添加i
的打印输出。但是,此输出对于大循环来说可能太长,因此您可以再次添加检查
CHECK(ChineseUtil::parsePinyinN(pinyinN) == pinyinT);
if ( ChineseUtil::parsePinyinN(pinyinN) != pinyinT )
{
cout << "Your own custom message " << i << endl;
}
CHECK(ChineseUtil::parsePinyinN(pinyinN)==pinyinT);
if(ChineseUtil::parsePinyinN(pinyinN)!=pinyinT)
{
cout我没有编译或测试以下内容,但其要点是复制UnitTest++CHECK宏并将其展开,以获取一个消息参数std::string,并将其与表示字符串化版本的值的字符串相结合
#define CHECK_MESSAGE(value, message) \
do \
{ \
try { \
if (!UnitTest::Check(value)) \
UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), (std::string(#value)+message).c_str()); \
} \
catch (...) { \
UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
(std::string("Unhandled exception in CHECK(" #value)+message+std::string(", ")+message+std::string(")")).c_str()); \
} \
} while (0)
#define CHECK_MESSAGE(value, message) \
do \
{ \
try { \
if (!UnitTest::Check(value)) \
UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), (std::string(#value)+message).c_str()); \
} \
catch (...) { \
UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
(std::string("Unhandled exception in CHECK(" #value)+message+std::string(", ")+message+std::string(")")).c_str()); \
} \
} while (0)