测试函数参数所有组合的 Pythonic 方法

Pythonic Way To Test All Combinations Of Function Parameters

我有一个 given 函数(我无法更改),其形式为:

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

在某些 unittest 代码中,我想对所有 25 次调用执行测试:

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)

(为了题目,每次调用运行,结果assertEqual结果为10。)

这样做的 pythonic 方式是什么?

您可以使用 itertools.product():

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