我正在用TDD编写一些代码,并且有一个类似这样的测试(注意,我使用的是pytest-describe,但是在使用没有附加格式的测试时也存在同样的问题):
import numpy as np
import pytest
from maszcal.emulator import LensingEmulator, LargeErrorWarning
class FakeInterpolator:
def __init__(self, coords, grid):
pass
def process(self):
pass
def interp(self, coords):
return np.ones(tuple(c.size for c in coords))
def describe_emulator():
def describe_error_check():
@pytest.fixture
def emulator(mocker):
mocker.patch('maszcal.emulator.RbfInterpolator', new=FakeInterpolator)
lensing_emulator = LensingEmulator()
lensing_emulator.generate_grid = lambda coords: np.ones(tuple(c.size for c in coords))
return lensing_emulator
def other_test_1(emulator):
do_stuff_with_emulator...
即使有pytest --collectonly
,这个测试也需要2.5-3秒来运行。当LensingEmulator
被导入时,它从maszcal.interpolate
模块导入,如下所示:
spec/emulator/LensingEmulator.py
imports ↑
maszcal/emulator.py
imports ↑
maszcal/interpolate.py
imports ↑
GPy
其中GPy是一个外部模块。当然还有其他依赖关系,但奇怪的是,如果我从maszcal.interpolate
中删除import GPy
行,我会得到0.9秒的加速,而不是2.5-3秒
我对这种行为感到相当困惑,因为单独导入模块并没有那么慢,但是它在测试的收集阶段增加了一个荒谬的时间量。解决这个问题的正确方法是什么
目前没有回答
相关问题 更多 >
编程相关推荐