1

わかりますが、内部関数のテストの書き方がわかりません。問題を説明する簡単なコードを次に示します。

def high(x, y):
    def low(x):
        return x*2
    return y*low(x)

class TestHigh(unittest.TestCase):
    def test_high(self):
        self.assertEqual(high(1,2),4)

    def test_low(self):
        self.assertEqual(low(3),6)

結果は

Exception: NameError: global name 'low' is not defined

「実際の」ケースでは、すべてのパスが実行されていることを確認するために、下位レベルの機能を分離してテストできるようにしたいと考えています。これは、上位レベルからのみテストする場合は面倒です。

4

3 に答える 3

2

low は high 関数内にネストされているため、関数の外部からアクセスすることはできません。関数に相当するものは次のようになりますhigh(3,1)

于 2012-11-30T21:37:24.977 に答える
2

公開されているインターフェイスが仕様に従って動作することを確認するためのテストを作成します。公開されていない内部機能のテストを作成しようとしないでください。

low()の結果を完全にテストできない場合high()、テストされていない部分はlow()外部の何にも関係ありません。

于 2012-11-30T21:37:42.200 に答える
1

BAD : クラスを作成し、関数をメソッド (または静的関数) として追加してみてください。

(やってはいけないことの参考としてここに残しておきます。)

良い: モジュール レベルの関数を記述するか、ネストするとテストできないことを受け入れます。

于 2012-11-30T21:40:44.503 に答える