2015-02-16 2 views
4

Мне нужно создать оболочку python для библиотеки с помощью SWIG и написать для нее единичные тесты. Я не знаю, как это сделать. Мое первое взятие этой проблемы состоит в том, чтобы имитировать динамическую библиотеку с тем же интерфейсом, что и те библиотеки, для которых я пишу обертку. Эта макетная библиотека может регистрировать каждый вызов или возвращать некоторые сгенерированные данные. Эти журналы и сгенерированные данные могут быть проверены модульными тестами.Как я должен выполнить единичную проверку оболочки python, сгенерированной SWIG

ответ

0

У меня есть много ситуаций, когда я использую SWIG-сгенерированную оболочку для модульного тестирования библиотеки, но я предполагаю, что вы запрашиваете модульное тестирование самой оболочки.

То, как я гоняюсь тестированием обертки, скажет mylib сами по себе является следующим:

Свойство: Для каждого класса говорит 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__ и позвоните им. Для некоторых методов я использовал трюк, который я нашел здесь для преобразования аргумента C struct в словарь на Python и раскрытия возможности создания структуры по умолчанию, которая может быть использована для тестирования.

 Смежные вопросы

  • Нет связанных вопросов^_^