python怎么测试c代码_如何正确测试python中的C-API,C-API返回错误代码

我的设置

我正在使用Python中的pytest和ctypes测试C库中的函数。C库中的每个函数调用一个嵌入式linux PCI板上的函数,然后C库函数返回一个整数,该整数映射到一组返回代码。如果函数成功,则返回0,否则返回其他错误代码。在

问题

我正在寻找一些关于测试此设置的最佳方法的见解,基本上我正在尝试找出测试此库的最佳实践。抛出异常和断言测试用例的最佳方法。我使用的测试环境目前使用的是pytest,切换会很痛苦。在

为了测试所有不同的条件,需要设置很多状态来测试,因为嵌入式linux板有状态。因此理想情况下,python可以捕捉到测试中出现的所有错误(如果有错误)。在

我的当前设置

目前我已经有了包装C库代码的python函数。测试将调用python代码,如果函数没有返回0,则包装python函数将抛出异常。因为我使用ctypes来调用DLL上的函数,所以所有的C函数都被python包装起来,以便于调用,所以传递参数也更容易。在

优点如果在测试或任何中间测试的设置中出现问题,则将引发异常。当测试用例的设置失败时,这使得调试失败的测试用例变得更加容易。在

缺点断言一个函数是成功的(返回0)是无用的,因为在函数返回之前会抛出一个错误。在

如果测试在特定条件下调用函数会导致错误,则必须将测试用例包装得凌乱,try except块try:

return_code = call_to_c_api()

assert return_code == 0, "Message about test case"

except MyCustomException:

assert MyCustomException.message="Return code of python wrapped api"

另一个选择

不要用python库包装C库,如果其中一个安装函数不起作用,就要进行测试来断言失败。在

优点当您预期会发生故障时,很容易断言来自C API的返回值不是O

缺点为了使测试更易于调试,对C API的每一次调用都需要python测试中的代码来确保它通过。即使这只是一个测试设置的调用。这意味着每个测试的代码行数几乎是原来的两倍。(或者您无法捕获设置中的错误,只能在测试失败时断言。这意味着当测试用例的设置失败时调试会很痛苦)

如果有人能给我任何的最好的方法来测试这将是非常感谢!可能还有其他的方法来测试这个,我还没有考虑过!在

干杯!在

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值