我的设置
我正在使用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测试中的代码来确保它通过。即使这只是一个测试设置的调用。这意味着每个测试的代码行数几乎是原来的两倍。(或者您无法捕获设置中的错误,只能在测试失败时断言。这意味着当测试用例的设置失败时调试会很痛苦)
如果有人能给我任何的最好的方法来测试这将是非常感谢!可能还有其他的方法来测试这个,我还没有考虑过!在
干杯!在