2016-03-29 5 views
0

Ich habe eine gegeben Funktion (die ich nicht ändern kann) von der Form:Pythonic Way alle Kombinationen von Funktion testen Parameter

def foo(bar=False, baz=False, ban=False, baf=False, bal=False): 
    ... 

In einigen unittest Code, würde Ich mag Tests auf alle ausführen die 2 Anrufe:

foo(bar=False, baz=False, ban=False, baf=False, bal=False) 
foo(bar=False, baz=False, ban=False, baf=False, bal=True) 
foo(bar=False, baz=False, ban=False, baf=True, bal=False) 
foo(bar=False, baz=False, ban=False, baf=True, bal=True) 
... 
foo(bar=True, baz=True, ban=True, baf=True, bal=True) 

(im Interesse der Frage, jeden Anruf ausführen, und assertEqual, dass das Ergebnis 10.)

Was ist ein pythonischer Weg?

+0

'itertools.product (((False, True),) * 5)' –

+0

@DavidHeffernan Danke. –

+2

@DavidHeffernan: Sie haben vergessen, das Tupel zu entpacken; es sollte 'itertools.product (* ((False, True),) * 5)' sein. – user2357112

Antwort

2

Sie können itertools.product() verwenden:

import itertools 
for combination in itertools.product(*[(True, False)]*5): 
    assertEqual(foo(*combination), 10) 
Verwandte Themen