Eine Funktion als Parameter übergeben mit beliebigen vielen Parametern
Verfasst: Sonntag 3. November 2019, 21:26
Hallo allerseits,
ich schreibe gerade einige Tests (Python3.xx) für eine Klasse und möchte gerne auch Assertions und Exceptions testen.
Dafür würde ich gerne eine Funktion benutzen, die als Argumente den erwarteten Fehler, die zu verwendende Funktion und ihre Parameter hat.
Beispiel: meine Funktionen func(a) und func_b(a, b) möchte ich mit der Funktion test_error() testen, sie erwarten aber eine unterschiedliche Anzahl an Parametern:
Will ich Funktionen mit nur einem Argument (so wie Funktion func) testen, so klappt das auch.
Doch wenn ich eine Funktion mit mehreren Argumenten testen möchte, geht das natürlich so nicht.
Jetzt könnte ich natürlich für jede Anzahl an Argumenten eine eigene Funktion test_error schreiben, doch ist das nötig? Gibt es die Möglichkeit der Funktion test_error eine Liste (oder ähnliches) der Argumente zu übergeben und diese beim eigentlichen Funktionsaufruf in einzelne Argumente "umzuwandeln"?
Auch wenn ich hier schon ewig angemeldet bin, so habe ich Python immer nur rudimentär eingesetzt und übergebe gerade das erste Mal eine Funktion als Parameter ...
Im Voraus vielen Dank!
Viele Grüße,
Ulrich
ich schreibe gerade einige Tests (Python3.xx) für eine Klasse und möchte gerne auch Assertions und Exceptions testen.
Dafür würde ich gerne eine Funktion benutzen, die als Argumente den erwarteten Fehler, die zu verwendende Funktion und ihre Parameter hat.
Beispiel: meine Funktionen func(a) und func_b(a, b) möchte ich mit der Funktion test_error() testen, sie erwarten aber eine unterschiedliche Anzahl an Parametern:
Code: Alles auswählen
def test_error(error, function, args):
try:
function(args)
return False
except error:
return True
except:
print('anderer Fehler')
return False
def func(a):
assert (a > 0), 'a has to be positive!'
return True
def func_b(a, b):
assert (a > b), 'a has to be greater than b!'
return True
if __name__ == '__main__':
test = test_error(AssertionError, func, -1) # funktioniert !
print(test)
test = test_error(AssertionError, func_b, [1, 2]) # gesuchte Erweiterung
print(test)
Doch wenn ich eine Funktion mit mehreren Argumenten testen möchte, geht das natürlich so nicht.
Jetzt könnte ich natürlich für jede Anzahl an Argumenten eine eigene Funktion test_error schreiben, doch ist das nötig? Gibt es die Möglichkeit der Funktion test_error eine Liste (oder ähnliches) der Argumente zu übergeben und diese beim eigentlichen Funktionsaufruf in einzelne Argumente "umzuwandeln"?
Auch wenn ich hier schon ewig angemeldet bin, so habe ich Python immer nur rudimentär eingesetzt und übergebe gerade das erste Mal eine Funktion als Parameter ...
Im Voraus vielen Dank!
Viele Grüße,
Ulrich