C++ 尽管测试成功,但单元测试内核仍转储。为什么?
所以我想尝试TDD并将CPPFUnit设置为测试环境。我读了食谱,因为我想从小事做起。我只想测试类因子的公共阶乘函数。我的测试成功运行,但是程序突然核心转储,我不知道为什么。我在Ubuntu 18.04 64位和CPPFUnit 1.14上使用g++ testmain.cppC++ 尽管测试成功,但单元测试内核仍转储。为什么?,c++,cppunit,C++,Cppunit,所以我想尝试TDD并将CPPFUnit设置为测试环境。我读了食谱,因为我想从小事做起。我只想测试类因子的公共阶乘函数。我的测试成功运行,但是程序突然核心转储,我不知道为什么。我在Ubuntu 18.04 64位和CPPFUnit 1.14上使用g++ testmain.cpp #include "test1.h" int main(){ CppUnit::TestCaller <Test1> test ("test", &Test1::testFactorial
#include "test1.h"
int main(){
CppUnit::TestCaller <Test1> test ("test", &Test1::testFactorial );
CppUnit::TestSuite suite;
suite.addTest(&test);
CppUnit::TextUi::TestRunner runner;
runner.addTest(&suite);
runner.run( );
return 0;
}
为什么在测试用例的执行过程中会出现这种奇怪的空闲和核心转储?CppUnit测试套件会删除析构函数中的所有测试对象。因此,您需要在main中分配测试,而不是直接在堆栈上使用测试 类似地,我认为TestRunner也会进行清理,因此您也需要分配TestSuide对象 请参阅中的“套件”和“TestRunner”标题: 因此,你的主要目标是:
int main() {
CppUnit::TestSuite* suite = new CppUnit::TestSuite();
suite->addTest(new CppUnit::TestCaller<Test1>("test", &Test1::testFactorial));
CppUnit::TextUi::TestRunner runner;
runner.addTest(suite);
runner.run();
return 0;
}
intmain(){
CppUnit::TestSuite*suite=新的CppUnit::TestSuite();
suite->addTest(新的CppUnit::TestCaller(“test”、&Test1::testFactorial));
CppUnit::TextUi::TestRunner;
runner.addTest(套件);
runner.run();
返回0;
}
CppUnit测试套件删除析构函数中的所有测试对象。因此,您需要在main中分配测试,而不是直接在堆栈上使用测试
类似地,我认为TestRunner也会进行清理,因此您也需要分配TestSuide对象
请参阅中的“套件”和“TestRunner”标题:
因此,你的主要目标是:
int main() {
CppUnit::TestSuite* suite = new CppUnit::TestSuite();
suite->addTest(new CppUnit::TestCaller<Test1>("test", &Test1::testFactorial));
CppUnit::TextUi::TestRunner runner;
runner.addTest(suite);
runner.run();
return 0;
}
intmain(){
CppUnit::TestSuite*suite=新的CppUnit::TestSuite();
suite->addTest(新的CppUnit::TestCaller(“test”、&Test1::testFactorial));
CppUnit::TextUi::TestRunner;
runner.addTest(套件);
runner.run();
返回0;
}
在setUp函数中也打印一些内容,看看调用是否正确。不要:Factor*f_6代码>。请改用唯一指针。这样的内存损坏的可能性更小。几个月前,在我放弃之前的两天里,我试着让unique_ptr和shared_ptr在一个项目中工作。我可能会在将来的某个时候使用它们,但现在我宁愿使用适合我的东西。如果这是正常的指针并释放或删除,那么就这样吧。在设置函数中也打印一些内容,看看它是否被正确调用。不要:Factor*f_6代码>。请改用唯一指针。这样的内存损坏的可能性更小。几个月前,在我放弃之前的两天里,我试着让unique_ptr和shared_ptr在一个项目中工作。我可能会在将来的某个时候使用它们,但现在我宁愿使用适合我的东西。如果这是正常的指针和释放或删除,那么就这样吧。非常感谢!这就解决了问题。这对我来说是非常不直观的,因为我习惯于调用delete来删除我使用的每一个新代码,但我想它更适合自动构建系统。不管怎样,现在一切都正常了。祝你周日愉快。非常感谢!这就解决了问题。这对我来说是非常不直观的,因为我习惯于调用delete来删除我使用的每一个新代码,但我想它更适合自动构建系统。不管怎样,现在一切都正常了。祝你星期天愉快。
user@computer:~/folder$ make test
g++ -g -Wall -o testexecutable testmain.cpp -lcppunit
user@computer:~/folder$ ./testexecutable
.delete testvariable
OK (1 tests)
free(): invalid size
Aborted (core dumped)
user@computer:~/folder$
int main() {
CppUnit::TestSuite* suite = new CppUnit::TestSuite();
suite->addTest(new CppUnit::TestCaller<Test1>("test", &Test1::testFactorial));
CppUnit::TextUi::TestRunner runner;
runner.addTest(suite);
runner.run();
return 0;
}