Как правильно писать тесты с помощью 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 человек – что-то большее, чем это приведет к округлению цифр.
Может ли кто-нибудь увидеть, как я могу заставить тестовые случаи работать, и где моя запись тестового кода пошла не так?
- из . импортировать x используя __import__?
- python: В чем причина не допускать * относительного импорта?
- Какова цель «пакета импорта»?
- Круговой импортный ад
- Включает ли python все перечисленные библиотеки?
В вашем 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.
- Python: как импортировать модуль с таким же именем, как и подпакет?
- Python: импортировать каждый модуль из папки?
- учебник flaskr; не может импортировать flaskr (инициализировать базу данных)
- ошибка импорта для pyautogui
- Импорт модулей python для использования только в одном файле
- Проблемы с установкой пакета Facbeook SDK для Python
- Контроль импорта python для уменьшения размера и накладных расходов
- Как написать декоратор с таким же импортом, как класс, в котором он используется?
- Как циклический импорт работает точно в Python