我知道CppUnit可以通过以下方式测试异常:
CPPUNIT_ASSERT_THROW(expression, ExceptionType);
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释如何CPPUNIT_ASSERT_THROW()实施?
我喜欢Visual Studio单元测试框架的一件事是,所有单元测试都是通过IDE完成的,从类定义到运行测试,测试都有一个图形绿色/红色条,给出测试结果.
我正在使用CppUnit和Google Test来测试我的应用程序.在给定文本输出的情况下,我在Visual Studio IDE中成功地进行了集成.
我想知道是否有人构建Visual Studio Addin允许从DevStudio内部运行测试并有一个图形测试运行器来提供反馈?
谢谢,
尼克
我有一堆用CPPunit编写的模块测试,手工创建了一些模拟.我正在寻找一种尽可能顺利地将它们迁移到GoogleTest的方法.你试过这样的手术吗?需要付出什么努力?
我刚注意到CPPUnit2存在.
有人在这里使用吗?或者是CPPUnit更常用的2?
谢谢.
你能比较C++的热门单元测试框架和Qt的QTest吗?
(cppunit,加强测试,谷歌测试等..)
缺点有哪些优点?谢谢.
注意:GUI测试对我们来说不是很重要.
如何从点更改cppunit的输出,指示对测试的实际名称进行了多少次测试,或者至少只是给测试调用者的字符串,如计算点和猜测哪些测试 - 它所代表的功能是非常无效的,如果是分段错误,它实际上会杀死整个程序.我确实找到了在断言失败的情况下更改错误输出的参考,但在一般输出上没有任何内容.
我的Testclass的套件功能:
static CppUnit::Test *suite() {
CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite( "Map Parser" );
//string to state
suiteOfTests->addTest( new CppUnit::TestCaller<Parser_test>("string to state I",&Parser_test::test_string_to_state_I));
....
return suiteOfTests;
}
Run Code Online (Sandbox Code Playgroud)
Main.cpp的
CppUnit::TextUi::TestRunner runner;
runner.addTest( Parser_test::suite() );
runner.run();
Run Code Online (Sandbox Code Playgroud)
我希望有这样的输出:
string to state I : OK
string to state II : OK
...
Run Code Online (Sandbox Code Playgroud)
然后,我能够确定程序何时由于不可捕获的异常(如SegFault)而崩溃.
但此刻我的ouptut看起来像这样:
...........
Segmentation fault
Run Code Online (Sandbox Code Playgroud) 我想我在这里错过了一些非常愚蠢的东西.
我安装了libcppunit :(我使用的是Ubuntu 12.04)
$ apt-cache policy libcppunit-dev
libcppunit-dev:
Installed: 1.12.1-4
Candidate: 1.12.1-4
Version table:
*** 1.12.1-4 0
500 http://archive.ubuntu.com/ubuntu/ precise/main amd64 Packages
100 /var/lib/dpkg/status
$ apt-cache policy libcppunit-1.12-1
libcppunit-1.12-1:
Installed: 1.12.1-4
Candidate: 1.12.1-4
Version table:
*** 1.12.1-4 0
500 http://archive.ubuntu.com/ubuntu/ precise/main amd64 Packages
100 /var/lib/dpkg/status
Run Code Online (Sandbox Code Playgroud)
我有一个简单的测试:
#include <iostream>
#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/CompilerOutputter.h>
#include <cppunit/TestFixture.h>
#include <cppunit/extensions/HelperMacros.h>
int main() {
CppUnit::Test* suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
CppUnit::TextUi::TestRunner runner;
runner.addTest(suite);
runner.setOutputter(new CppUnit::CompilerOutputter(&runner.result(), std::cerr));
return runner.run() ? 0 : 1;
}
Run Code Online (Sandbox Code Playgroud)
我这是编译器输出:
$ g++ …Run Code Online (Sandbox Code Playgroud) 我正在为一个大型C++项目实施单元测试基础设施,由于政治原因,我几乎肯定CppUnit会将其作为单元测试框架推进.
我正在尝试识别与CppUnit混合的模拟框架.我找到了mockpp,我听说Google Mock应该有效.
哪些框架兼而有之CppUnit?
我有一个要测试的简单函数。函数是这样的:
void func()
{
// do some work
...
if(error_detected)
{
fatal_error("failure...");
exit(1);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我必须编写一个产生错误的测试。只有exit(1)存在失败的测试,仍然如此!
这个案子一般是怎么处理的?
我可以重写/更改功能代码,因为我可以完全控制整个项目。但是,我正在使用 cppunit 并希望我可以将其作为套件中的测试之一。
更新:
关于所提出的一些解决方案,我想提出一个注意事项:添加了一个可以根据我们是否正在测试而以不同方式实现的接口并不是一种强大的测试方式。这是为什么?因为我将使用一个接口进行测试,该接口在测试中的实现与现实世界中的不同。测试结果并不能证明现实世界的情况会正常工作。至少不是 100%(它只能证明该路径确实是在特定情况下采用的。)
我正在使用 CppUnit 为 C++ 库编写单元测试。默认情况下,它打印一个“.”。每个测试的字符到控制台。我想在测试运行之前将每个测试的名称记录在单独的行上。
我研究了 CppUnit API,但如何自定义输出并不明显。它不是提供自定义选项,而是一个可以插入新处理程序的框架。(教程也没有帮助。)我可能会花一天的时间来弄清楚如何做到这一点,但我不能浪费时间。有人可以提供一个可以自定义每个测试日志输出的快速片段吗?
cppunit ×10
c++ ×7
unit-testing ×5
googletest ×3
boost-test ×1
exit ×1
mocking ×1
qtestlib ×1
testing ×1
ubuntu ×1