23

何も返さない関数をテストするにはどうすればよいですか?

たとえば、次の関数があるとします。

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 は機能しますか?

4

2 に答える 2

36

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

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

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

于 2014-02-11T23:29:35.323 に答える
4

単体テストのポイントは、関数が行うことをテストすることです。値を返さない場合、実際に何をしているのでしょうか? この場合、 はローカル変数であるため、何もしていないよう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'])

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

于 2013-02-14T05:15:39.477 に答える