如何在C中使用Unity单元测试测试具有不同参数的函数?
函数add_first(int n)向链表中添加一个数字,如果成功,则返回0,否则返回-1 测试很好,但我想测试更广泛的情况,以便用不同的参数测试更多相同的函数 如果我先修改test\u add\u并添加一个参数,它会给我一个错误,因为我的\u RUN\u test和RUN\u test只接受“myfunction(void)”。因此,我必须为每个数字创建单独的函数 我在test.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)
#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)
{
...
}