我想知道是否可以在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个版本,这在生产环境中不是这样。这是个好主意,还是应该在测试环境的第一个版本中保留它?在

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

  1. java反转函数_在JAVA中,下列哪个函数可用于字符串的反转?

    在JAVA中,下列哪个函数可用于字符串的反转? 更多相关问题 很多危机是无法准确预测的,必须为危机做好准备,包括().通信计划以及重要关系的建立等. (A) 危 幼儿园科技小制作可分为模型类.动力类. ...

  2. mysql数据库求平均值的函数_使用MySQL中的AVG函数求平均值的教程

    MySQL的AVG函数是用来求出各种记录中的字段的平均值. 要了解AVG功能考虑EMPLOYEE_TBL表具有以下记录: mysql> SELECT * FROM employee_tbl; + ...

  3. matlab中find函数_在R中使用Matlab函数

    R, Matlab MATLAB是一款商业数学软件, R是一个拥有庞大工具库的数据统计.建模.可视化分析软件.R 不仅支持C/C++, python代码的运行和工程移植, 也支持在R中使用MATLAB ...

  4. python3 range函数_为什么python3中的xrange函数不能用

    升级到python3的同学应该会注意到以前经常用的xrange没了! 是的,python3的range就是xrange.直接看效果!Python 2.7.13 (v2.7.13:a06454b1afa ...

  5. create报错不是函数_各种SQL中关于日期函数的那些事(建议收藏)

    hive.presto.spark.impala.mysql常用日期时间函数吐血整理 使用的SQL多了不知道大家有没这样的困惑,SQL的语法在大多数方面是一致的,如SELECT,JOIN,GROUP ...

  6. java string()函数_从Java中的String函数返回String构建器?

    我有以下程序,我必须将字符串附加到另一个字符串,我使用字符串构建器以标准方式执行.但是,即使在将其转换为toString()之后,该函数也不允许我返回ab.我想问为什么? import java.ut ...

  7. mounted钩子函数_解决Vue中mounted钩子函数获取节点高度出错问题

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. Python之 sklearn:sklearn.preprocessing中的StandardScaler函数的简介及使用方法之详细攻略

    Python之 sklearn:sklearn.preprocessing中的StandardScaler函数的简介及使用方法之详细攻略 目录 sklearn.preprocessing中的Stand ...

  9. python自带的sum()函数和numpy库中的sum()函数的区别

    在学习<机器学习实战>一书的第十章时,对 return np.sqrt(sum(np.power(vecA - vecB, 2))) 这样一条语句输出的结果老是不对,明明想要输出的是对两个 ...

  10. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

最新文章

  1. cookie用法之一,最简单cookie操作
  2. Java黑皮书课后题第5章:*5.18(使用循环语句打印4个图案)使用嵌套的循环语句,编写4个独立的程序打印下面的图案
  3. Linux 用户篇——用户管理的配置文件
  4. 同步与异步、并行与并发、阻塞与挂起
  5. ASCII表 基本记忆 -- C
  6. 解决MVC运行controller的时候只有有参构造函数但是程序一定要走无参构造函数的方法
  7. 计算机丨浏览器访问出现DNS_PROBE_POSSIBLE解决方法
  8. html js加载404_【第 245 期】2020 年,JS 令一个新人沮丧
  9. 推荐一个PPT副业,日赚800-1000元
  10. 前端程序员 学习书籍推荐
  11. 汤小丹计算机操作系统慕课版课后题答案第四章:进程同步
  12. Windows配置Caffe教程
  13. 抖音:时间熔炉的诞生
  14. WYSE S10、WYSE V90、HP T5740瘦客机评测
  15. redis持久化、主从和哨兵模式详解
  16. 2020最新广告法_2020最新广告法全文解读
  17. 聊聊前端框架——尤雨溪
  18. 程序员泪流满面的瞬间,第三季
  19. python趣味编程---羊车门问题
  20. 利用html 和css模仿必应搜索主页。(一)

热门文章

  1. 【安全】eWebeditor编辑器上传webshell
  2. 工作态度决定了工作结果
  3. Elastic Sketch: Adaptive and Fast Network-wide Measurements
  4. 前端a标签下载图片文件
  5. 工厂模式以及应用简单解释
  6. 计算机维修5级,电脑芯片级维修教程
  7. 直线方程和直线系方程
  8. 实现一个javascript手势库 -- base-gesture.js
  9. xpwifi热点设置android,WinXP笔记本设置WiFi热点的方法
  10. 创新工场李开复:漫延——中国移动互联网的2011年