单元测试 - 如果在生产代码中仅调用一次函数,则在两个测试用例中调用函数

时间:2017-04-05 07:21:27

标签: unit-testing cpputest

也许有人有使用 cpputest 进行单元测试的经验。

我有这样的事情:

源代码在测试中:

main_function()
{
   static int8 is_functioncalled = 1;

   if (is_functioncalled){
   my_local_function();
   is_functioncalled = 0
   }

UNIT测试环境:

TEST(TESTGROUP,TEST_CASE1){

   //Some Unit Test checks of my_local_function()

   main_function();
}

TEST(TESTGROUP,TEST_CASE2){

   //Some other Unit Test stuff

   main_function();        // --> my_local_function() will not be called in this test case because it's called already before

}

我需要在TEST_CASE2中再次调用函数 my_local_function()。该函数通过公共接口 main_function()间接调用,可以在单元测试中直接调用。有没有人知道如何在一般情况下或在 cpputest 环境中执行此操作?

2 个答案:

答案 0 :(得分:2)

尝试覆盖测试组的setup()方法 - 在每次测试之前调用它。如果你把它放在全局范围内,你可以在那里重置is_functioncalled标志,如下所示:

static int8 is_functioncalled = 1;
main_function()
{
   if (is_functioncalled){
   my_local_function();
   is_functioncalled = 0
   }
}

//

extern int8 is_functioncalled; // If its in global scope in other source file

TEST_GROUP(TESTGROUP)
{
   void setup()
   {
      is_functioncalled = 1;
   }
}

尝试https://cpputest.github.io/manual.html - 您需要知道的全部内容。

答案 1 :(得分:1)

您可以在代码中添加一个定义,如果它正在测试中,则修改行为:

    main_function()
    {
        static int8 is_functioncalled = 1;
    #ifdef UNITTEST
        is_functioncalled = 1;
    #endif
        if (is_functioncalled){
            my_local_function();
            is_functioncalled = 0
        }