Запуск теста на скрипте Python — что я делаю не так?

#python #unit-testing #testing

Вопрос:

У меня есть простая файловая программа (удален код из функций, так как он не имеет отношения к проблеме):

 import random
import sys


def poziom(level):
    *does something and returns something*

def gra(chance):
    *does something and returns something*


def save(name):
    *does something and returns something*


while True:
    *does something in loop, executing other functions above*
 

Я пытаюсь запустить простой модульный тест для одной из его функций:

 import unittest

from my_game import save
from my_game import gra
from my_game import poziom




class TestSum(unittest.TestCase):
    def test_list_int(self):
        """
        Test that it can sum a list of integers
        """
        check = "Test string"
        result = poziom(check)
        self.assertEqual(result, 0)

if __name__ == '__main__':
    unittest.main()
 

Однако этот тест вместо запуска функции poziom() проходит через весь файл, также выполняя код, лежащий в основе оператора While True.
Я делаю что-то не так? Можно ли в таком случае написать тест, который проверяет ТОЛЬКО одну функцию и возвращаемое ею значение?

Комментарии:

1. Если вы вставите while True: это в if __name__ == "__main__": заявление, это все исправит? В противном случае, просто импортировав этот файл, вы выполните содержимое этого цикла.

Ответ №1:

Однако этот тест вместо запуска функции poziom() проходит через весь файл, также выполняя код, лежащий в основе оператора While True. Я делаю что-то не так?

Вот как import это работает. Он выполняет код в файле, который вы импортируете. Чтобы решить проблему, поместите цикл while в if __name__ == '__main__': так же, как вы это делаете в своем тестовом файле.

Комментарии:

1. Не работает, к сожалению. Я сделал, как вы сказали: if name == ‘ main ‘: while True: unittest.main (), но выполнение тестов все равно приводит меня к циклу while true внутри основного файла.

2. @MikaelDiak Какой файл вы отредактировали? unittest.main() находится в файле теста, но while True находится в файле с функциями.