如何使用UnitTest++运行单个测试?
我开箱即用地运行UnitTest++。我的main函数如下所示:
int main()
{
printf("diamond test v0.1 %s\n\n",TIMESTAMP);
diamond::startup();
UnitTest::RunAllTests();
diamond::shutdown();
printf("press any key to continue...");
getc(stdin);
}为了调试,我想写一些类似于UnitTest::RunSingleTests("MyNewUnitTest");而不是UnitTest::RunAllTests();的代码。UnitTest++是否提供这样的函数?如果提供,语法是什么?
发布于 2010-08-23 18:14:48
尝试将其作为unittest的main() (实际上我将其放在一个文件中并将其添加到unittest库中,以便在链接到库时可执行文件自动使用此main()。非常方便。)
int main( int argc, char** argv )
{
if( argc > 1 )
{
//if first arg is "suite", we search for suite names instead of test names
const bool bSuite = strcmp( "suite", argv[ 1 ] ) == 0;
//walk list of all tests, add those with a name that
//matches one of the arguments to a new TestList
const TestList& allTests( Test::GetTestList() );
TestList selectedTests;
Test* p = allTests.GetHead();
while( p )
{
for( int i = 1 ; i < argc ; ++i )
if( strcmp( bSuite ? p->m_details.suiteName
: p->m_details.testName, argv[ i ] ) == 0 )
selectedTests.Add( p );
p = p->next;
}
//run selected test(s) only
TestReporterStdout reporter;
TestRunner runner( reporter );
return runner.RunTestsIf( selectedTests, 0, True(), 0 );
}
else
{
return RunAllTests();
}
}使用参数调用以运行单个测试:
> myexe MyTestName或单人套间
> myexe suite MySuite发布于 2011-02-09 23:17:12
这几乎是正确的。"Test“实际上是作为链表中的一个节点,所以当您将它添加到一个新的列表中时,您必须更正指针,以避免包含比预期更多的测试。
所以你需要替换掉
p = p->next;使用
Test* q = p;
p = p->next;
q->next = NULL;杰弗里
发布于 2012-05-17 06:35:44
如果您告诉RunTestsIf一个套件的名称,它只能运行一个套件。
class MyTrue
{
public:
MyTrue(const std::string & suiteName, const std::string & testName)
: suite(suiteName), test(testName) {}
bool operator()(const UnitTest::Test* const testCase) const
{
return suite.compare(testCase->m_details.suiteName) == 0 &&
test.compare(testCase->m_details.testName) == 0;
}
private:
std::string suite;
std::string test;
};
int main (...) {
bool isSuite = false;
std::string suiteName = "suite01";
std::string testName = "test01";
UnitTest::TestReporterStdout reporter;
UnitTest::TestRunner runner(reporter);
if (isSuite) {
runner.RunTestsIf(UnitTest::Test::GetTestList(),
NULL, MyTrue(suiteName, testName), 0);
} else {
runner.RunTestsIf(UnitTest::Test::GetTestList(),
NULL, UnitTest::True(), 0);
}
}https://stackoverflow.com/questions/3546054
复制相似问题