我正在编写一个简单的Pong游戏,并且在我的测试中遇到了一些导入问题。我的项目结构如下:
app/
__init__.py
src/
__init__.py
Side.py
Ball.py
test/
__init__.py
SideTests.py
在Side.py中,我有:
from math import sqrt, pow
class Side:
def __init__(self, start, end):
self.start = start
self.end = end
def collision(self, ball):
# returns True if there is a collision
# returns False otherwise
(算法的细节无关紧要)。在Ball.py中,我有:
class Ball:
def __init__(self, position, direction, speed, radius):
self.position = position
self.direction = direction
self.speed = speed
self.radius = radius
在SideTests.py中,我有:
import unittest
from src.Side import Side
from src.Ball import Ball
class SideTests(unittest.TestCase):
def setUp(self):
self.side = Side([0, 0], [0, 2])
self.ball_col = Ball([1, 1], [0, 0], 0, 1)
def test_collision(self):
self.assertTrue(self.side.collision(self.ball_col))
当我跑步时:
python test/SideTests.py
Traceback (most recent call last):
File "tests/SideTests.py", line 15, in test_collision
self.assertTrue(self.side.collision(self.ball_col))
AttributeError: Side instance has no attribute 'collision'
我知道这可能是一个非常简单的导入错误,但我看过的所有示例都没有帮助解决这个问题。
答案 0 :(得分:1)
首先,修复SideTests.py
中的缩进和导入import unittest
from app.Side import Side
from app.Ball import Ball
class SideTests(unittest.TestCase):
def setUp(self):
self.side = Side([0, 0], [0, 2])
self.ball_col = Ball([1, 1], [0, 0], 0, 1)
您也不需要test/__init__.py
。
现在要运行它,你需要在virtualenv或全局安装一个名为app
的软件包,或者在运行测试之前使用一个可以为你收集相对导入的工具,比如你可以pip install的nosetests。 / p>
~/app $ nosetests .
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK