2015-09-23 6 views
1

В настоящее время я выполняю модульные тесты (которые я только что узнал на этой неделе), чтобы реорганизовать существующую программу, прежде чем расширять ее функциональность.Unittest ++ не распознает тесты

Однако UnitTest ++ неожиданно сообщила об ошибке «Проект содержит 0 тестов» после того, как я сделал около 5-6 тестов в классе шаблонов (full code here), и теперь он продолжает давать мне эту ошибку, хотя я вернулся тестовый код до того, что было до появления ошибки. Прямо сейчас он прерывается всякий раз, когда объект создается.

Класс предназначен для управления массивами данных в алгоритме оптимизации, поэтому функции предназначены только для инициализации, чтения, записи и обновления массивов и сами по себе не должны были быть проблемой (или нуждаться в большом тестировании).

Я не могу найти тему, которая обсуждает аналогичную проблему. Если кто-то может указать мне на причину, это было бы здорово.

Технические характеристики:

Я использую CodeLite 8.2.0 как IDE на Windows, 8.1 с 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); 
} 
+1

У меня была эта проблема, когда я пытался запускать модульные тесты без создания проекта. Для меня это работает: активируйте тестовый проект (дважды щелкните), постройте его (F7), затем запустите (F5) –

ответ

0

После основном разрывая класс и создавая его снова под рамкой единичного теста, я обнаружил, что в коде кодексы были решены. Это связано с операциями с указателями массивов без выделенной памяти. Наиболее проблематичной функцией является деструктор, который освобождает любое распределение памяти, используя delete[]. Быстрое грязное исправление - прокомментировать все строки delete[]. Я не думаю, что это хороший способ сделать это, но, по крайней мере, это позволяет мне проверять остальную часть класса.

Смежные вопросы