Модульный тест для типа «нет» в Python

Как мне протестировать функцию, которая ничего не возвращает?

Например, скажем, у меня есть эта функция:

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?


person peppy    schedule 14.02.2013    source источник


Ответы (2)


Все функции Python что-то возвращают. Если вы не укажете возвращаемое значение, будет возвращено None. Итак, если ваша цель действительно состоит в том, чтобы убедиться, что что-то не возвращает значение, вы можете просто сказать

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

(Однако это не может отличить функцию без явного возвращаемого значения от функции, которая выполняет return None.)

person Kevin Christopher Henry    schedule 11.02.2014

Смысл юнит-теста в том, чтобы протестировать то, что делает функция. Если он не возвращает значение, то что он на самом деле делает? В этом случае похоже, что он ничего не делает, поскольку 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'])

Поскольку функция не возвращает значение, для нее нет никакой точечной проверки (если только вам не нужно убедиться, что она не возвращает значение).

person aquavitae    schedule 14.02.2013