有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和Square上的TestFixture,则单元测试通过。我尝试了几种配置,但没有启动while循环,就无法导入Square进行测试。
因此,当我仅从Main.py导入一个类时,它仍然在该类外部运行代码。真是令人困惑。这是导入机制的链接,我不知道为什么它运行代码以及如何防止它https://docs.python.org/3/reference/import.html
由于游戏模拟不在我的控制范围内,所以我对Main.py的编写方式没有太多更改。我唯一的想法是将循环和类拆分为两个文件进行开发和测试;提交时,我将不得不将文件串联在一起。
所以(感谢您到目前为止的阅读;):
答案 0 :(得分:2)
为避免运行循环,将文件作为模块导入时,请按照以下方式编写:
if __name__ == "__main__":
while True:
# do stuff every turn
x, y, value = [int(j) for j in input().split()]
答案很简单,当您导入模块时,将执行该文件上的代码,这将导致循环运行并在input()
上阻止执行。有关其工作原理的更多详细信息,请read this answer with a detailed explanation