Sie verspotten die super-Klasse fordert python
Ich bin dabei einige unit-Tests und irgendwann muss ich simulieren Sie eine super
Aufruf einen Fehler auslösen, zum Beispiel:
@classmethod
def myfunc(cls, *args, **kwargs)
try:
super(MyClass, cls).my_function(args, kwargs)
except MyException as e:
#...
Ich bin mit dem mocker Bibliothek zu verspotten, meine Objekte im Allgemeinen, aber ich habe nicht gefunden eine Weise zu verspotten dies.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit der mock Bibliothek würde ich so etwas tun.
In Ihrer Klasse definition:
In dem Modul, in dem Sie anrufen
MyClass
:Update: Wie Python 3.3 die mock-Bibliothek ist Teil der standard-Bibliothek unter
unittest.mock
.my_cool_method
s zu verspotten, und es ist unhandlich. Ich brauche einen Weg, um einfach nur zu verspotten, die ganze Klasse und nicht einzelne Methoden.class A:
und einclass B(A):
- und ich will testenB
während der Spott der geerbten Methoden ausA
können Sie nicht nur ModellA
, weilB
erbt vonA
- und so wird selbst zu einem mock, die verhindert, dass mir bei Aufruf der Methoden, die ich aufrufen möchten, denn werden Sie verspottet. Dies war für meinen use-case-statt: bazaar.launchpad.net/~cupstream2distro-Betreuer/...Habe ich einen Weg gefunden, eine Art hacky, aber es funktioniert, erkläre ich Ihnen mit meinem Beispiel, das basiert auf diese Antwort also danke @kindall:
also im Grunde das, was ich Tue, ist zu prüfen, ob die
super
Anruf aus der Klasse ich will spotten, sonst nur eine normalesuper
.Hoffe, das jemand hilft 🙂
Gut, dann müssen Sie verhöhnen die
my_function
Methode der OberklasseMyClass
zu sprengen.super
Klasse aufrufen, sollte dies möglich sein. Danke für die Idee du.super
callable selbst? Ich denke, das wird verursachen zu erhöhen, Ausnahmen auf mehr Plätze, als Ihnen lieb ist.@Markus ist auf der Suche an der richtigen Stelle. So lange, wie Sie unit-Tests (D. H. es gibt nur einen Anruf zu
super
), können Sie mock__builtin__.super
wie in: