Как правильно писать тесты с помощью unittest?

Я пытаюсь понять, как писать модульные тесты для функций, которые я написал в Python, – вот код, написанный ниже:

def num_buses(n): import math """ (int) -> int Precondition: n >= 0 Return the minimum number of buses required to transport n people. Each bus can hold 50 people. >>> num_buses(75) 2 """ bus = int() if(n>=0): bus = int(math.ceil(n/50.0)) return bus 

Я пытаюсь написать тестовый код, но они дают мне неудачные результаты – вот код, который я начал с:

 import a1 import unittest class TestNumBuses(unittest.TestCase): """ Test class for function a1.num_buses. """ def test_numbuses_1(self): actual = num_buses(75) expected = 2 self.assertEqual(actual, expected) # Add your test methods for a1.num_buses here. if __name__ == '__main__': unittest.main(exit=False) 

Когда я запускаю модуль, нажав F5 – это то, что я получаю –

 E ====================================================================== ERROR: test_numbuses_1 (__main__.TestNumBuses) ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\1-blog-cacher\TestNumBuses.py", line 8, in test_numbuses_1 actual = num_buses(75) NameError: global name 'num_buses' is not defined ---------------------------------------------------------------------- Ran 1 test in 0.050s FAILED (errors=1) 

Поэтому мой тест не прошел – хотя он должен пройти, так как количество пассажиров составляет 75, и каждый автобус может содержать максимум 50 человек – что-то большее, чем это приведет к округлению цифр.

Может ли кто-нибудь увидеть, как я могу заставить тестовые случаи работать, и где моя запись тестового кода пошла не так?

    В вашем unittest файле вам нужно import num_buses .

    Это устраняет вашу непосредственную проблему, но если вы определили num_buses в a1 тогда вам нужно сделать a1.num_buses иначе Python будет считать, что num_buses является глобальной функцией.

     import a1 import unittest import num_buses class TestNumBuses(unittest.TestCase): """ Test class for function a1.num_buses. """ def test_numbuses_1(self): actual = num_buses(75) #a1.num_buses(75) <- expected = 2 self.assertEqual(actual, expected) # Add your test methods for a1.num_buses here. if __name__ == '__main__': unittest.main(exit=False) 

    Проверьте это: Тест Cyber-Dojo – просто нажмите кнопку resume, а затем в test_untitled.py нажмите кнопку TEST.