单元测试中的分段错误

时间:2014-02-26 01:04:20

标签: c unit-testing gcc

我用单位测试的单位函数测试了我的C代码。它显示错误和分段错误?在单元测试失败后,通常会出现分段错误吗?或者我的代码有问题? 因为,当我更正错误时,它会成功运行

time.c

//gets start time and duration in 24 hour format and returns the total of the two in 24 hour clock


int add_time(int starttime, int duration)
{
     int startHour = starttime / 100;
     int startMinute = starttime % 100;
     int durationHour = duration / 100;
     int durationMinute = duration % 100;

     int finishHour = startHour + durationHour;
     int finishMinute = startMinute + durationMinute;

     if(finishMinute > 59)
     {
         finishMinute %= 60;
        finishHour++; 
    }

     finishHour %= 24;

     return (finishHour * 100 + finishMinute);  
}

//given end and start time, calculates the duration in 24 hour clock (duration is always less than one day) 
int duration(int endtime, int starttime)
{
     if(endtime < starttime)
         endtime += 2400;

     int endHour = endtime / 100;
     int endMinute = endtime % 100;
     int startHour = starttime / 100;
     int startMinute = starttime % 100;

     int durationMinute = endMinute - startMinute;
     int durationHour = endHour - startHour;

     if(durationMinute < 0)
     {
        durationMinute += 60;
        durationHour--;
     }

    return (durationHour * 100 + durationMinute);

}   

testtime.c

#include "unity.h"
#include "time.c"
setUp()
{
}
tearDown()
{
}
void firstTest()
{
    TEST_ASSERT_EQUAL_INT(1, add_time(2359, 2));
    TEST_ASSERT_EQUAL_INT(1530, add_time(1215, 315));
    TEST_ASSERT_EQUAL_INT(2215, add_time(2345, 2230));
}

int main()
{
    firstTest();
    return 0;
}

2 个答案:

答案 0 :(得分:2)

说单元测试失败后通常会出现段错误是不正确的。但是,当代码错误时,通常通常会出现seg-faults和其他错误。

您无法真正概括与特定框架或技术相关的段错误(在本例中为单元测试)。在您调查错误原因之前,您只知道发生了错误。

尝试在调试器中运行不正确的代码并确定segfault的确切位置?它是在您的代码中还是在单元测试框架中?

答案 1 :(得分:1)

您似乎正在使用Unity进行测试。 尝试制作这样的主要方法:

int main()
{
   UNITY_BEGIN();
    if (TEST_PROTECT()) {
      RUN_TEST(firstTest);
    }
   UNITY_END();
}