【问题标题】:Unittest++ does not recognize testsUnittest++ 不识别测试
【发布时间】:2015-12-20 04:24:09
【问题描述】:

我目前正在执行单元测试(这是我这周刚刚学到的),以便在扩展现有程序的功能之前重构现有程序。

但是,在我对模板类 (full code here) 进行了大约 5-6 次测试之后,UnitTest++ 突然给出了一个错误,提示“项目包含 0 个测试”,现在它一直给我这个错误,即使我已经将测试代码恢复到错误出现之前的状态。现在,只要实例化对象,它就会失败。

该类用于管理优化算法中的数据数组,因此这些函数只是初始化、读取、写入和更新数组,本身不应该成为问题(或需要大量测试)。

我找不到讨论类似问题的帖子。如果有人能指出我的原因,那就太好了。

规格:

我使用 CodeLite 8.2.0 作为 Windows 8.1 上的 IDE,MinGW (TDM-GCC-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);
}

【问题讨论】:

  • 当我尝试在不构建项目的情况下运行单元测试时遇到了这个问题。它对我的工作方式是:激活测试项目(双击),构建它(F7),然后运行(F5)

标签: c++ windows unit-testing codelite unittest++


【解决方案1】:

在单元测试框架下基本上将类拆开并重新构建后,我发现代码中的哪些地方使框架出错了。这与在没有分配内存的情况下对数组指针的操作有关。最有问题的函数是析构函数,它使用delete[] 释放任何内存分配。一个快速的肮脏修复方法是注释掉所有delete[] 行。我认为这不是一个好方法,但至少它可以让我测试课程的其余部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多