c – 如何像junit一样使用cppunit – 两个主电源
我知道
Java的单元测试非常简单.我们只需要使用JUnit并运行测试类作为JUnit测试.
现在我正在使用C,我找到了一个测试库:cppunit. 似乎我需要使用特定的函数main来运行我的测试. 我该怎么办?当我进行测试和运行项目时,我必须切换主电源? 解决方法
您应该将代码分开测试到一个库项目,该项目可以从目标应用程序和单元测试运行器链接. 然后还有两个提供main()函数的项目: >一个用于目标应用程序,它只是将main()实现转发给MyTargetApp类成员函数的调用,例如MyTargetApp ::的run() 可以配置目标应用程序项目,而无需链接到cppunit库和测试套件/ fixture实现(这肯定会减少最终的工件占用空间).
另一种选择是只使用一个带有main()函数的项目,该函数可以使用条件预处理器语句进行编译(如 #ifdef TESTING int runUnitTests(int argc,char* argv[]); #endif int main(int argc,char* argv[]) { #ifdef TESTING // run the unit tests // ----------------------------------------------------------------- return runUnitTests(argc,argv); #else // run the application // ----------------------------------------------------------------- MyTargetApp app; return app.run(argc,argv); #endif #ifdef TESTING int runUnitTests(int argc,char* argv[]) { std::string testPath = (argc > 1) ? std::string(argv[1]) : ""; // Create the event manager and test controller CppUnit::TestResult controller; // Add a listener that colllects test result CppUnit::TestResultCollector result; controller.addListener( &result ); // Add a listener that print dots as test run. CppUnit::TextTestProgressListener progress; controller.addListener( &progress ); // Add the top suite to the test runner CppUnit::TestRunner runner; runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() ); try { std::cout << "Running " << testPath; runner.run( controller,testPath ); std::cerr << std::endl; // Print test in a compiler compatible format. CppUnit::CompilerOutputter outputter( &result,std::cerr ); outputter.write(); } catch ( std::invalid_argument &e ) { // Test path not resolved std::cerr << std::endl << "ERROR: " << e.what() << std::endl; return 0; } return result.wasSuccessful() ? 0 : 1; } #endif 然后有2个不同的项目配置,一个定义TESTING,另一个没有. 这个解决方案的一个缺点是,您将获得程序中剩余的所有单元测试套件和装置,因为cppunit宏将自动注册并实例化它们,无论是否将从执行路径调用它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |