pytest 似乎正在使用旧的源代码并因此导致测试失败。我不知道如何更新它。
测试代码:
from nba_stats import league
class TestLeaders():
def test_default():
leaders = league.Leaders()
print(leaders)
Run Code Online (Sandbox Code Playgroud)
源代码(league.py):
from nba_stats.nba_api import NbaAPI
from nba_stats import constants
class Leaders:
...
Run Code Online (Sandbox Code Playgroud)
当我在父目录上运行时pytest,收到一条引用旧导入语句的错误。
_____________________________ ERROR collecting test/test_league.py ______________________________
ImportError while importing test module '/home/mfb/src/nba_stats/test/test_league.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
test_league.py:1: in <module>
from nba_stats import league
../../../.virtualenvs/nba_stats_dev/lib/python3.6/site-packages/nba_stats/league.py:1: in <module>
from nba_stats import _api_scrape, _get_json
E ImportError: cannot import name '_api_scrape'
Run Code Online (Sandbox Code Playgroud)
我尝试重置我的虚拟环境并通过 pip 重新安装我的包。我需要做什么才能告诉它看到新的导入语句以及为什么会发生这种情况?
编辑:完全删除我的虚拟环境,然后创建一个新的虚拟环境似乎可以解决这个问题,但这似乎是任何进一步的源代码更改都会反复出现的问题。当然一定有一种方法可以不必每次都重置我的虚拟环境吗?
因此,开发一个应用程序时,它被认为是很好的做法,指定 最小(最少限制)需要依赖于版本setup.py的,install_requires。那么,我怎么知道我的项目实际上依赖于我的依赖项的哪些版本?
有没有办法自动确定这一点?如果没有,是否有一种很好的方法来测试我指定的依赖范围的上限和下限?
理想情况下,我更愿意专注于实际开发,而不是手动跟踪我的依赖项的每个新版本并筛选发布历史以找出我使用的功能首次引入的时间。
我想向我的 pytest 固定装置传递一个参数,这样当固定装置 90% 相同时我不需要 10 个不同的固定装置。
我想要实现的最简单的例子:
@pytest.mark.parametrize('foo', [a=1])
def test_args(tmp_path, foo):
assert foo == 3
@pytest.fixture
def foo(tmp_path, a, b=2):
return a + b
Run Code Online (Sandbox Code Playgroud)
有没有办法将 a 和 b 标记为参数而不是其他固定装置?或者也许最好的方法是通过定义一个函数而不是一个固定装置来实现这一点?
我把tmp_path夹具放在那里,以确保参数化是明确的,并允许使用多个夹具。
值得指出的是
@pytest.fixture
def foo(request):
return request.param[0] + request.param[1]
@pytest.mark.parametrize('foo', [(1, 2)], indirect=True)
def test_args(tmp_path, foo):
assert foo == 3
Run Code Online (Sandbox Code Playgroud)
有效,(如文档中所定义),但不是我正在寻找的。我想知道与我给定的代码更相似的东西是否可以工作。我希望能够按名称传递参数、指定参数的默认值等。
我见过这个类似的 stackoverflow 问题,这似乎表明 pytest(?) 支持此功能,但它的答案似乎只是进一步混乱,而且它们似乎都不适合我提出的情况。