2017-05-11 4 views
0

Ich versuche, Unit-Test zu schreiben, die Funktionsparameter überprüft:Wie Patch ctypes.WinDLL in Python zu verspotten?

def test_my_function(): 
    my_function = mock.patch('mymodule.myclass.myfuction') 

Meine fuction wie dies in mymodule aussieht:

from ctypes import POINTER, WinDLL, c_int, cast, pointer, byref 

class myclass: 
    def myfunction(): 
     # some logic 

Test nicht mit Fehlermeldung:

ImportError: cannot import name WinDLL

Also, ich versuche Patch ctypes.WinDLL in meinem Test zu verhöhnen:

mocker.patch('ctypes.WinDLL') 
my_function = mock.patch('mymodule.myclass.myfuction') 

Got error:

AttributeError: <module 'ctypes' from '/usr/lib/python2.7/ctypes/__init__.pyc'> does not have the attribute 'WinDLL

Ich kann nicht Mock Patch WINDLL, weil ctypes definiert WinDLL wenn Client Windows verwendet. Mein Betriebssystem ist Linux.

Ist es möglich, dieses Problem zu lösen?

Antwort

0

Ich habe selbst eine Lösung gefunden. Standardmäßig mocker.patch Patches nur definierte Attribute. Es ist möglich, nicht vorhandenes Attribut zu verspotten, vorbei Argument create=True:

mocker.patch('ctypes.WinDLL', create=True)