python如何将测试文件从代码分割到单独的目录中
下面是一个fizzbuzz程序,在一个文件中使用unittest通过TDD完成,我在命令行中使用python如何将测试文件从代码分割到单独的目录中,python,unit-testing,Python,Unit Testing,下面是一个fizzbuzz程序,在一个文件中使用unittest通过TDD完成,我在命令行中使用python fizzbuzz.py-v运行它 import unittest class FizzBuzz(): def fizz_buzz(self, number): if number % 3 == 0 and number % 5 == 0: return 'fizzbuzz' if number % 3 == 0:
python fizzbuzz.py-v
运行它
import unittest
class FizzBuzz():
def fizz_buzz(self, number):
if number % 3 == 0 and number % 5 == 0:
return 'fizzbuzz'
if number % 3 == 0:
return 'fizz'
if number % 5 == 0:
return 'buzz'
return str(number)
class FizzBuzzTests(unittest.TestCase):
def setUp(self):
self.fb = FizzBuzz()
def test_one_gets_one(self):
self.assertEqual('1', self.fb.fizz_buzz(1))
def test_three_gets_fizz(self):
self.assertEqual('fizz', self.fb.fizz_buzz(3))
def test_five_gets_buzz(self):
self.assertEqual('buzz', self.fb.fizz_buzz(5))
def test_six_gets_fizz(self):
self.assertEqual('fizz', self.fb.fizz_buzz(6))
def test_fifteen_gets_fizzbuzz(self):
self.assertEqual('fizzbuzz', self.fb.fizz_buzz(15))
if __name__ == '__main__':
unittest.main()
我决定拆分该文件,因为将测试分开会读得更好
树结构是
|-fizzbuzz
|-app
- __init__.py
-fizzbuzz.py
|-tests
- __init__.py
-test_fizzbuzz.py
我将文件拆分如下(仅显示部分文件、一个测试和通过的代码)
及
在fizzbuzz目录中,我使用python tests/test_fizzbuzz.py
运行测试,测试应该通过
但是当我注释掉return str(number)
或删除它时,我仍然通过
如果我将self.assertEqual('1',self.fb.fizz_buzz(1))
更改为self.assertEqual('12',self.fb.fizz_buzz(1))
它仍在运行不存在的代码
我删除了test目录中的所有.pyc
文件,现在我得到了ImportError:没有名为fizzbuzz的模块
错误
如果我将fizzbuzz.py
文件移动到test文件夹并运行python测试/test\u fizzbuzz.py
测试通过(这就是我获得.pyc文件的方式)。但这不是我想要的
为什么会这样?我把这个文件分错了吗?我是否缺少额外的代码或文件
如果我把它分错了,最好的办法是什么
感谢您的帮助。这与python如何查找和执行代码有关 Python使用
sys.path
查找模块/脚本/包。
当您运行python脚本时,它会将该脚本的目录附加到sys.path
,即/etc/fizzbuzz/tests
。这不会让python找到包含fizzbuzz
的文件夹,因为它位于上面的目录中,python看不到它
最简单的答案是将fizzbuzz上方目录的文件路径添加到名为PYTHONPATH的环境变量中。如果环境变量不存在,您可以创建它,python会将其中的任何目录添加到sys.path
一旦这样做了,你将需要调整一些事情
test_fizzbuzz中的导入语句需要更改
from fizzbuzz.app import fizzbuzz
并在创建气泡嗡嗡声时进行更改
fizzbuzz.FizzBuzz()
或者,您可以将导入更改为:
from fizzbuzz.app.fizzbuzz import FizzBuzz
你不需要改变其他任何事情
最后,如果要运行tests文件夹中的任何和所有测试,则可以运行
python -m unittest discover tests
从fizzbuzz项目目录中的命令行,它应该查找并运行tests文件夹中的所有测试。这意味着你不需要
if name == '__main__':
在python文件中
希望这有帮助。
fizzbuzz.py
需要在你的PYTHONPATH上。但是您使用\uuuu init\uuuuuuuupy
表明您想要使用软件包,在这种情况下,app
需要在您的PYTHONPATH
中,您应该导入app.fizzbuzz
,谢谢您设法解决了这个问题。只是用了一次又一次的测试来运行测试,一切都正常。
python -m unittest discover tests
if name == '__main__':