如何对SWIG生成的python包装器进行单元测试

2024-05-04 00:42:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用SWIG为库创建python包装器并为其编写单元测试。我不知道怎么做。我对这个问题的第一个看法是模拟动态库,它的接口与我为其编写包装器的库相同。这个模拟库可以记录每个调用或返回一些生成的数据。这些日志和生成的数据可以通过单元测试进行检查。在


Tags: 数据记录动态单元测试swig
1条回答
网友
1楼 · 发布于 2024-05-04 00:42:49

我有很多情况,我使用SWIG生成的包装器对库进行单元测试,但我想您所要求的是对包装器本身进行单元测试。在

我测试包装器的方法如下:

属性:对于每一个公开了属性的类来说MyClass,我使用MyClass._swig_getmethods__列出所有可以修改的属性。我确认有正确数量的属性可用,并且它们按预期工作

# Filter out builtin_function_type
getmethods = {k: v for k,v in mylib.MyClass.__swig_getmethods__.iteritems() if type(v) != types.BuiltinFunctionType}
# Filter out lambda functions (constructors)
getmethods = {k: v for k,v in getmethods.iteritems() if v.func_name != '<lambda>'}.keys()

nGetSuccess = 0
testMe = set()
m = mylib.MyClass()
for method in getmethods:
    try:
      value = eval('m.'+method)
      nGetSuccess = nGetSuccess + 1
    except Exception as e:
      print(e.message)
self.assertEqual(nGetSuccess,len(getmethods))

静态方法

对于静态方法,我已经按名称建立了一个预期函数的列表,并在mylib.__dict__中搜索它们的存在并调用它们。对于一些方法,我使用了在这里找到的一个技巧,在Python中将C结构参数转换为字典,并公开了创建默认结构的可能性,该结构可用于测试。在

相关问题 更多 >