私は、反復可能なものを返す python 関数をテストするのに苦労していreturn imap(f, some_iter)
ますreturn permutations([1,2,3])
。
したがって、順列の例では、関数の出力が[(1, 2, 3), (1, 3, 2), ...]
. それで、コードのテストを開始します。
def perm3():
return permutations([1,2,3])
# Lets ignore test framework and such details
def test_perm3():
assertEqual(perm3(), [(1, 2, 3), (1, 3, 2), ...])
perm3()
リストではなく反復可能であるため、これは機能しません。したがって、この特定の例を修正できます。
def test_perm3():
assertEqual(list(perm3()), [(1, 2, 3), (1, 3, 2), ...])
そして、これはうまくいきます。しかし、イテラブルをネストした場合はどうなるでしょうか。それはイテラブルを生成するイテラブルですか?式を言うように
product(permutations([1, 2]), permutations([3, 4]))
。これはおそらく役に立ちませんが、(イテレータをアンロールすると)次のようになることは明らかです[((1, 2), (3, 4)), ((1, 2), (4, 3)), ...]
。list
ただし、結果のみiterable<blah>
をラップすることはできません[iterable<blah>, iterable<blah>, ...]
。もちろんできますmap(list, product(...))
が、これはネスト レベル 2 でのみ機能します。
では、python テスト コミュニティには、イテラブルをテストする際の問題に対する解決策がありますか? 当然のことながら、無限ジェネレーターが必要な場合のように、一部のイテラブルはこの方法でテストできませんが、それでもこの問題は、誰かがこれについて考えたことがあるほど一般的です。