如何用C语言测试,C语言单元测试CMock使用(一) 基本用法

原文

以下文章基于AI翻译,不准确处请参考原文。

我们到底在说什么?

CMock是一个很好的小工具,它可以获取你的头文件并为它创建一个模拟接口,这样你就可以更容易地对模块进行单元测试。对于头文件中的每个函数原型,如下所示:

int DoesSomething(int a, int b);

…你得到一个自动生成的DoesSomething函数,你可以链接到它,而不是你真正的DoesSomething函数。通过使用这个模拟版本,您可以验证它是否接收到您想要的数据,并让它返回您想要的任何数据,让它在您想要的时候抛出错误,等等……为您最新的实际模块接触的所有东西创建这些,您就会突然处于一个强大的位置:您可以控制和验证您最新创建的每个细节。

为了使这更容易,CMock也给你一堆像下面的函数,所以你可以告诉生成的DoesSomething函数如何为每个测试行为:

void DoesSomething_ExpectAndReturn(int a, int b, int toReturn);

void DoesSomething_ExpectAndThrow(int a, int b, EXCEPTION_T error);

void DoesSomething_StubWithCallback(CMOCK_DoesSomething_CALLBACK YourCallback);

void DoesSomething_IgnoreAndReturn(int toReturn);

你可以把这些东西背靠背堆起来,它就会记住你想传递的内容,比如:

test_CallsDoesSomething_ShouldDoJustThat(void)

{

DoesSomething_ExpectAndReturn(1,2,3);

DoesSomething_ExpectAndReturn(4,5,6);

DoesSomething_ExpectAndThrow(7,8, STATUS_ERROR_OOPS);

CallsDoesSomething( );

}

这个测试将调用CallsDoesSomething,这是我们正在测试的函数。我们期望这个函数调用三次做某事。第一次,我们检查以确保它被称为DoesSomething(1,2),并神奇地返回一个3。第二次我们检查DoesSomething(4,5)并返回一个6。第三次我们验证做了一些事情(7,8),我们将抛出一个错误而不是返回任何东西。如果calls做的事情有任何错误,它将失败测试。如果你没有调用足够的,或调用太多,或使用错误的参数,或以错误的顺序调用,它将会失败。

CMock基于Unity,用于所有内部测试。它使用Ruby完成所有主要工作(版本2.0.0及以上)。

安装

要安装CMock,您需要做的第一件事是获取一个Ruby副本。如果您使用的是linux或osx,那么您可能已经拥有它了。你可以输入以下文字来证明:

ruby --version

如果它以一种暗示无知的方式回应,那么你就需要安装它。你可以去ruby-lang获取最新版本。如果它返回的版本大于2.0.0,您还需要这样做。去做吧。我们会等待。

一旦你有了Ruby,你有三个选择:

Install Ceedling (which has it built in!) through your commandline using gem install ceedling.

生成的Mock模块摘要

除了模拟本身之外,CMock还将生成以下函数,以便在测试中使用。expect函数总是生成的。其他函数只有在这些插件被启用时才会生成:

Expect:

你的基本订书钉将会在你的日常工作中使用。通过调用这个函数,您就告诉CMock您希望在测试期间调用这个函数。它还指定了您希望使用哪些参数调用它,以及在调用时您希望返回什么返回值。为了让多个调用排队,你可以连续多次调用这个函数。

void func(void) => void func_Expect(void)

void func(params) => void func_Expect(expected_params)

retval func(void) => void func_ExpectAndReturn(retval_to_return)

retval func(

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值