如何在C中使用Unity单元测试测试具有不同参数的函数?

如何在C中使用Unity单元测试测试具有不同参数的函数?,c,unit-testing,C,Unit Testing,函数add_first(int n)向链表中添加一个数字,如果成功,则返回0,否则返回-1 测试很好,但我想测试更广泛的情况,以便用不同的参数测试更多相同的函数 如果我先修改test\u add\u并添加一个参数,它会给我一个错误,因为我的\u RUN\u test和RUN\u test只接受“myfunction(void)”。因此,我必须为每个数字创建单独的函数 我在test.c文件中有这段代码,我正在使用单元测试-Unity,正如标题所说 #define MY_RUN_TEST(func)

函数add_first(int n)向链表中添加一个数字,如果成功,则返回0,否则返回-1

测试很好,但我想测试更广泛的情况,以便用不同的参数测试更多相同的函数

如果我先修改test\u add\u并添加一个参数,它会给我一个错误,因为我的\u RUN\u test和RUN\u test只接受“myfunction(void)”。因此,我必须为每个数字创建单独的函数

我在test.c文件中有这段代码,我正在使用单元测试-Unity,正如标题所说

#define MY_RUN_TEST(func) RUN_TEST(func, 0)

ITEM *list = NULL;

void printList(struct ITEM *node) 
{
  if(node == NULL)
  {
    printf("list is empty");
  } 
    while (node != NULL) 
    { 
        printf("%d ", node -> value); 
        node = node->next; 
    } 
} 

void test_add_first_1()
{
  int ret;
  ret = add_first(&list, 1);
  TEST_ASSERT_EQUAL(0, ret);
}

void setUp(void)
{
    // This is run before EACH test
}

void tearDown(void)
{
  // This is run after EACH test
  printList(list);
  printf("\n");
}

int main (int argc, char * argv[])
{
    
    
    UnityBegin();
   
    MY_RUN_TEST(test_add_first_1);
    
    return UnityEnd();
}

因此,我的问题更具体地说,是否有任何方法可以像-my_RUN_test(test_add_first(n));-n是整数吗

如果您在这段代码中发现其他错误,请告诉我,我只是从单元测试开始。:)


谢谢大家!

您将无法通过具有不同签名的函数来运行\u测试,但幸运的是您不必这样做

您可以做的只是制作一个更通用的测试用例,尝试插入多个项目:

void add_some_items_at_head()
{
    size_t i = 0;
    
    for (i = 0; i < 10; i++)
    {
        TEST_ASSERT_EQUAL(0, add_first(&list, i));
    }   
}
 void validate_items_order(int expected_order[], int len)
 {
     size_t i = 0;
     struct ITEM *node = list;

     for (i = 0; i < len; i++)
     {
         TEST_ASSERT_NOT_NULL(node);
         TEST_ASSERT_EQUAL(expected_order[i], node->value);
         node = node->next;
     }
 }
  static void RunAllTests(void)
  {
      RUN_TEST_GROUP(add_first);
      RUN_TEST_GROUP(add_last);
      RUN_TEST_GROUP(remove_last);
  }

  int main(int argc, const char * argv[])
  {
      return UnityMain(argc, argv, RunAllTests);
  }

  TEST_GROUP_RUNNER(add_first)
  {
      RUN_TEST_CASE(add_first, add_some_items_at_head);
      RUN_TEST_CASE(add_first, another_test_for_that_function);
  }

  TEST_GROUP_RUNNER(add_last)
  {
      ...
  }

  TEST_GROUP_RUNNER(remove_last)
  {
      ...
  }