我正在使用 CUnit 进行项目单元测试。
我需要测试是否使用正确的参数调用 libc 函数以及是否以正确的方式处理它们的返回值。
例如:如果我调用 bind(...) 函数 - 我想检查我传递的 af 参数并断言如果这是错误的,并且我还想模拟它的返回值并断言如果我检查它正确的方式。
出于这些目的,我希望 CUnit 环境有一个内置机制,让我在测试时调用“模拟”bind() 函数,在运行代码时调用真正的 bind() 函数 - 但我找不到类似的东西这。
您能否告诉我 CUnit 中是否缺少某些内容,或者建议一种实现此功能的方法。
谢谢,
乔.
不幸的是,您无法使用 CUnit 模拟 C 中的函数。
但是您可以通过使用和滥用定义来实现您自己的模拟函数:
假设您在编译测试时定义了 UNITTEST,您可以在测试文件(或包含文件)中定义如下内容:
#ifdef UNITTEST
#define bind mock_bind
#endif
在您将在测试模式下编译的mock_helper.c 文件中:
static int mock_bind_return; // maybe a more complete struct would be usefull here
static int mock_bind_sockfd;
int mock_bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
{
CU_ASSERT_EQUAL(sockfd, mock_bind_sockfd);
return mock_bind_return;
}
然后,在您的测试文件中:
extern int mock_bind_return;
extern int mock_bind_sockfd;
void test_function_with_bind(void)
{
mock_bind_return = 0;
mock_bind_sockfd = 5;
function_using_bind(mock_bind_sockfd);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)