py.测试集合更改结果

2024-10-17 06:19:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在努力让自己好起来py.测试对sympy项目的支持,并遇到了一个奇怪的问题py.测试采集过程正在更改测试结果。在

如果我明确地指定了测试文件,测试就通过了(有一些测试显示了这种行为,但我只选择了一个)

$ py.test sympy/physics/vector/tests/test_frame.py -k test_coordinate_vars -v --showlocals
============================= test session starts ==============================
platform linux -- Python 3.4.1 -- py-1.4.25 -- pytest-2.6.3 --     /home/ptb/miniconda3/bin/python3
architecture: 64-bit
cache:        yes
ground types: python 

collected 4 items 

sympy/physics/vector/tests/test_frame.py::test_coordinate_vars PASSED

================ 3 tests deselected by '-ktest_coordinate_vars' ================
==================== 1 passed, 3 deselected in 2.12 seconds ====================

如果我只指定目录而不是文件,会得到以下错误

^{pr2}$

请注意,有问题的“A”在任何函数/类定义之外的文件顶部声明。如果我将'A'的声明移到函数中,那么这两个函数都使用pass,但是我真的很想了解发生了什么,因为我们使用了大量在测试文件顶部声明的模块级变量。在

有人能告诉我发生了什么事吗?或者告诉我文档的相关部分吗?在

更新

基于这个answer对一个稍有不同的问题,我提出了以下的解决方案,与将“a”移动到文件中的每个test_函数相比,这似乎是一个更好/更简单的解决方案:

@pytest.fixture(autouse=True)
def global_vars(request):
    request.function.__globals__['A'] = ReferenceFrame('A')

如果有一些解决方案不涉及破坏全局名称空间,我很乐意了解它们。(以及原故障原因)

更新2

原来这是由于sympy中涉及ReferenceFrame的缓存错误造成的。由于缓存是全局的,它无意中允许一个文件中的安装程序代码损坏运行的测试文件中的某些数据。在


Tags: 文件函数pytest声明coordinatepytesttests