Как сделать так чтоби unittest не считал вивод через print(), а только то что виводится через return
Вот мой код програми
n = int(input('n = '))
n1 = n
i = 0
depth = 0
level = 0
def f(n):
global depth
global level
if n == 1:
k = 1
level += 1
elif n % 2 == 0:
k = 2 * f(n / 2) - 1
level += 1
else:
k = 2 * f(n - 1) + 1
level += 1
if depth < level:
depth = level
print("level = ", level)
if k > n1:
return n1
else:
return k
print("№", f(n), " ", "depth = ", depth)
А вот код unittest:
import unittest
from LAB5_5 import f
class TestF(unittest.TestCase):
def test_f(self):
self.assertEqual(f(10), 5) # add assertion here
if __name__ == '__main__':
unittest.main()
Unit test берет за результат первый print(), а мне нужно чтобы он проверял return
Когда я запускаю Unit test в консоль вводиться n = то есть он запускает код за границами функции. Как мне сделать так, чтобы unit test запускал только фрагмент кода из функции.
Помогите, пожалуйста, заранее СПАСИБО!
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Точно также, как во втором файле поместите всё, что не относится к функции в конструкцию if __name__ == '__main__'::
def f(n):
# здесь тело функции
...
if __name__ == '__main__':
n = int(input('n = '))
n1 = n
i = 0
depth = 0
level = 0
print("№", f(n), " ", "depth = ", depth)
Тогда этот блок с print при импорте не будет исполняться. Он будет исполняться только при прямом запуске этого файла.