我目前正在执行单元测试(这是我本周刚刚了解的),以便在扩展现有程序的功能之前对其进行重构。
然而,在我对一个模板类( UnitTest++ )进行了大约5-6次测试之后,UnitTest++突然给出了一个错误,上面写着“ProjectContent0test”,现在它一直给我这个错误,尽管我已经将测试代码恢复到了错误出现之前的状态。现在,每当对象被实例化时,它就会失败。
该类用于在优化算法中管理数据数组,因此这些函数仅用于初始化、读取、写入和更新数组,其本身不应是一个问题(或需要进行大量测试)。
我找不到讨论类似问题的线索。如果有人能指点我的事业,那就太好了。
Specifications:
我使用CodeLite 8.2.0作为Windows8.1上的IDE,MinGW (TDM 32)作为编译器,UnitTest++1.3作为单元测试框架。
UnitTest++中断之前的代码(万一有用)如下:
#include "C:\UnitTest++-1.3\src\UnitTest++.h"
#include "candidate.h"
#include <stdexcept>
using namespace std;
int main(int argc, char **argv)
{
return UnitTest::RunAllTests();
}
//Test constructor and initialization of memories
TEST(init_num){
int numvar=4;
int fit_size=2;
int err=0;
Candidate<double> can;
try{
can.init_can(numvar, fit_size);
}
catch(out_of_range){
err=1;
}
catch(invalid_argument){
err=2;
}
CHECK(err==0);
//CHECK(can.num==numvar);
}
TEST(init_fitrange){
int numvar=2;
int fit_size=-1;
bool err=0;
Candidate<double> can;
try{
can.init_can(numvar, fit_size);
}
catch(invalid_argument){
err=1;
}
CHECK(err==1);
}
//Skip memory initialization check. If numvar and num_fit are valid the memory will be initialized properly.
TEST(velocity_init){
int numvar=2;
int fit_size=2;
double vel[numvar];
double total=0;
Candidate<double> can;
can.init_can(numvar, fit_size);
can.init_velocity();
for(int i=0;i<numvar;++i){
vel[i]=1;
}
can.update_vel(vel);
for(int i=0;i<numvar;++i){
total+=can.velocity[i];
}
CHECK(total==numvar);
//same mechanism as update_global, update_best and read functions
}当我将此测试附加到列表中时,出现了错误:
TEST(write_contfit){
int numvar=2;
int fit_size=2;
Candidate<double> can;
can.init_can(numvar, fit_size);
double fit[fit_size];
int tt=fit_size;
double total=0;
for(int i=0;i<fit_size;++i){
fit[i]=1;
}
can.write_contfit(fit,tt);
for(int i=0;i<fit_size;i++){
total+=can.contfit[i];
}
CHECK(total==fit_size);
}发布于 2015-09-28 21:19:39
在基本上拆散类并在单元测试框架下重新构建类之后,我发现代码中的哪些地方使框架出错了。这与没有分配内存的数组指针的操作有关。最有问题的函数是析构函数,它使用delete[]释放任何内存分配。一个快速的肮脏修复就是注释掉所有的delete[]行。我不认为这是一个很好的方法,但至少它允许我测试其他班级。
https://stackoverflow.com/questions/32729616
复制相似问题