web-dev-qa-db-ja.com

Pythonのnoneタイプのユニットテスト?

何も返さない関数をテストするにはどうすればよいのかと思っていました。たとえば、私がこの関数を持っているとしましょう:

def is_in(char):
    my_list = []
    my_list.append(char)

そして、私がそれをテストする場合:

class TestIsIn(unittest.TestCase):

    def test_one(self):
    ''' Test if one character was added to the list'''
    self.assertEqual(self.is_in('a'), and this is where I am lost)

比較できる戻り値がないため、関数が等しいと主張するものがわかりません。

編集:assertInは機能しますか?

19
peppy

すべてのPython関数は何かを返します。戻り値を指定しない場合、Noneが返されます。したがって、目標が本当に何かが返されないことを確認することである場合価値、あなたはただ言うことができます

self.assertIsNone(self.is_in('a'))

(ただし、これは、明示的な戻り値のない関数とreturn Noneを実行する関数を区別できません。)

単体テストのポイントは、関数が実行することをテストすることです。値を返さない場合、実際には何をしていますか?この場合、my_listはローカル変数であるため、何も実行していないように見えますが、関数が実際には次のようになっている場合:

def is_in(char, my_list):
    my_list.append(char)

次に、charが実際にリストに追加されているかどうかをテストします。テストは次のようになります。

def test_one(self):
    my_list = []
    is_in('a', my_list)
    self.assertEqual(my_list, ['a'])

関数は値を返さないため、ポイントテストはありません(値を返さないことを確認する必要がない限り)。

4
aquavitae