2012-11-28 11 views
7

次の例では、ネストされた関数f1()を単体テストしますか?Python:ネストされた関数を単体テストする方法を教えてください。

def f(): 
    def f1(): 
     return 1 
    return 2 

また、テストを必要とする関数はネストされていないはずですか?

+0

@alemangui:感謝場合を無視するには、オプションでは、そのようなコードを実行することです!それは私の質問に答えます。 – e1i45

+0

私は答えとしてそれを入れます: – alemangui

答えて

3

this linkにも同様の質問があります。しかし、短い答え:あなたは外側の要素から内部関数にアクセスすることはできません。

テスト目的のために、プライベート外側の内部関数を変更する方法がありますか?

5

あなたはできません。

単位テストを外部関数に制限するか、内部関数を別の場所に移動する必要があります。

1

私は同じ疑念を持ち、内部機能のテストを行う方法を見つけました。

def outer(): 
    def inner(): 
     pass 

    if __debug__: 
     test_inner(inner) 
     # return 

def test_inner(f): 
    f() # this calls the inner function 

outer() 

基本的には、内部関数をパラメータとして外部に送信し、必要に応じてテストすることができます。 outer()を呼び出すと、テストが実行され、クロージャなので、外部関数(変数など)から余分なプロパティが保持されます。リストを使って、あなたが望む数の関数を送ることができます。

python -O code.py 
+0

これは非常に特別な場合のソリューションです。外側関数のローカル変数にアクセスするループ内の入れ子関数を考えてみましょう(入れ子関数のより一般的な使用例、IMHO)。 – Alfe

関連する問題