Получил 2 файла:
new_project
├── Main.py
└── testing.py
Я бегу:
$ cd new_project
$ python -m unittest testing.py
Весь мой тестовый файл:
import unittest
from Main import Square
class TestSquare(unittest.TestCase):
def test_init(self):
self.assertEqual(Square(0,0).center, Point(50,50))
print("test")
С Square в качестве первого класса в моем файле Main.py.
Main.py составлен как показано ниже:
import sys
import math
import random
def d_print(message):
print(message, file=sys.stderr)
class Square:
# on découpe le terrain en square et on les marque avec top right corner of square
def __init__(self, x, y):
self.xtr = x
self.ytr = y
self.size = 100
self.explored = False
self.center = Point(x+50, y+50)
while True:
# do stuff every turn
x, y, value = [int(j) for j in input().split()]
Код внутри цикла while будет вызываться каждый ход игровым симулятором. Симулятор предоставляет входные данные.
Когда я запускаю командную строку unittest, фактически ожидает ввода
Если я удаляю импортируемые Main и TestFixture на Square, тестирование модуля проходит. Я попробовал несколько конфигураций, и мне не удалось импортировать Square для теста без запуска цикла while.
Поэтому, когда я импортирую только класс из Main.py, он все равно запускает код вне класса. Это ошеломляет мой разум. Вот ссылка на механизм импорта, и я не понимаю, почему он запускает код и как его предотвратить https://docs.python.org/3/reference/import.html
Так как игровая симуляция не находится под моим контролем, я не могу сильно изменить способ написания Main.py Моя единственная идея - разделить цикл и классы на два файла для разработки и тестирования; при отправке мне пришлось бы объединить файлы обратно в один.
Итак (спасибо за чтение;):
- почему unittest / import работает таким образом?
- есть идеи, как это решить? (Я сейчас пробую идею разбить файлы, сообщу)