python helper函数_用Python中的helper函数对ABC进行单元测试

我想知道是否可以在Python的测试环境中更改helper函数。我的应用程序结构如下:app/

trader/

__init__.py

strategies/

__init__.py

base_strategy.py

util.py

models/

__init__.py

base_model.py

tests/

__init__.py

strategies/

__init__.py

stub_strategy.py

test_strategies.py

models/

__init__.py

stub_model.py

其中每个base_*.py是一个抽象基类,从tests目录中的每个stub_*.py文件继承而来。在我的util.py文件中,有一个helper函数,它可以查看trader/strategies/models目录并注册所有可用的模型:

^{pr2}$

现在我的问题是:在我的BaseTradingStrategy-类中,我有一个方法,它使用existing_alpha_models列表来检查模型是否存在。在from abc import ABC, abstractmethod

from .util import existing_alpha_models

class BaseTradingStrategy(ABC):

"""BaseTrading Code comes here"""

@abstractmethod

def some_abs_method(self):

raise NotImplementedError

def register_model(self, model_name):

if model_name not in existing_alpha_models:

raise ValueError

对于单元测试,我已经创建了存根类,它们不在trader/strategies/models目录中,因此没有在existing_alpha_models列表中注册。当我想用pytest测试ABC的功能时,许多测试都失败了,因为检查模型可用性的方法失败了。一个简单的解决方案是将存根类放在我的应用程序的trader目录中,但我宁愿将我的测试代码与应用程序的其余部分分开。我可能还可以将existing_alpha_models作为基类的属性,但是除了让测试通过之外,我并不认为这样做有什么意义。有没有一种方法可以在existing_alpha_models中注入存根类进行单元测试,这样ABC的测试在不改变基类的情况下不会失败吗?在

------------编辑------------------

我现在有两个我的测试代码的工作版本。一个是使用@hoefling的verison,我只需将alpha_models添加到existing_alpha_models列表中:from tests.strategies import StubTradingStrategy

from tests.strategies.alpha_models import StubModel, StubModel2, StubModel3

from trader.strategies.util import existing_alpha_models

existing_alpha_models.extend(["StubModel", "StubModel2", "StubModel3"])

还有一个版本,我将模型添加到alpha_models模块并重新加载2个模块:import importlib

from trader.strategies import alpha_models

from tests.strategies.alpha_models import StubModel, StubModel2, StubModel3

setattr(alpha_models, "StubModel", StubModel)

setattr(alpha_models, "StubModel2", StubModel2)

setattr(alpha_models, "StubModel3", StubModel3)

from nutrader.strategies import util

import nutrader.strategies.base_strategy

importlib.reload(util)

importlib.reload(nutrader.strategies.base_strategy)

from tests.strategies import StubTradingStrategy

第二个版本的优点是它允许我实际测试util代码,但是它也在我的测试代码中引入了潜在的风险,因为某些模块存在2个版本,这在生产环境中不是这样。这是个好主意,还是应该在测试环境的第一个版本中保留它?在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值