Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尽管测试成功,但单元测试内核仍转储。为什么?_C++_Cppunit - Fatal编程技术网

C++ 尽管测试成功,但单元测试内核仍转储。为什么?

C++ 尽管测试成功,但单元测试内核仍转储。为什么?,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

所以我想尝试TDD并将CPPFUnit设置为测试环境。我读了食谱,因为我想从小事做起。我只想测试类因子的公共阶乘函数。我的测试成功运行,但是程序突然核心转储,我不知道为什么。我在Ubuntu 18.04 64位和CPPFUnit 1.14上使用g++

testmain.cpp

#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;
}