Gtest如何用于测试C代码?代码之间的预处理器语句是否可以在gtest单元测试中进行测试?

问题描述 投票:-5回答:1

我是gtest单元测试的新手,请你建议如何从下面的程序开始

FUNC()
    {
        int errorId =1;
        if(!Func1())
        {
            error = True;
        }
        else
        {
            Func2(FALSE); 
        }
        /* Can i able to perform unit test for below line ? */
        #if(ERROR_REPORT == ON)
        if(errorId != NO_ERROR)
        {
            ReportError(ID, errorId);
        }
        #endif
    }
c unit-testing googletest vs-unit-testing-framework
1个回答
0
投票
#if(ERROR_REPORT == ON)
//...
#endif

是 - 正如您所说 - 一个预处理器命令(如果在编译时将ERROR_REPORT定义为ON,则只会编译其间的文本。

你可以对这段代码进行单元测试:为ReportError()创建一个存根/模拟(你可能需要应用依赖注入或类似的插入存根/模拟 - 网上有很多很好的框架和教程,例如gmock)和或者创建两个测试类(一个将ERROR_REPORT定义为ON,另一个不定义)或编译整个测试可执行文件两次(一个使用ERROR_REPORT定义ON)并且您的预期测试结果也取决于ERROR_REPORT的值。

© www.soinside.com 2019 - 2024. All rights reserved.