Как сделать так чтоби 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()

  1. Unit test берет за результат первый print(), а мне нужно чтобы он проверял return

  2. Когда я запускаю 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 при импорте не будет исполняться. Он будет исполняться только при прямом запуске этого файла.

→ Ссылка