Python,Py.test:如何包含另一个类的本地函数而不是py.tested?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python,Py.test:如何包含另一个类的本地函数而不是py.tested?相关的知识,希望对你有一定的参考价值。
我有我的测试模块:
import pytest
from src.model_code.central import AgentBasic
class AgentBasicTestee(AgentBasic):
pass
@pytest.fixture()
def agentBasic():
return AgentBasicTestee()
@pytest.mark.parametrize('alpha, beta, delta, expected', [
(2, 1, 1, pytest.approx(1)),
])
def test_a1(agentBasic, alpha, beta, delta, expected):
assert(agentBasic.a1(alpha, beta, delta,) == expected)
在我的导入模块中
from src.model_code.crra_utility import AgentCrra
AgentCOne = AgentCrra
class AgentBasic:
@staticmethod
def a1(alpha, beta, delta):
k = AgentCOne.k_bar(alpha, beta, delta)
return beta * alpha * (
alpha - 1) * k ** (alpha - 1)
我得到的错误信息是:> k = AgentCOne.k_bar(alpha, beta, delta)
E TypeError: k_bar() missing 1 required positional argument: 'delta'
编辑:
class AgentCrra:
def k_bar(self, alpha, beta, delta):
"""non-stochastic steady-state for capital"""
return ((1 / beta - 1 + delta) / alpha) ** (1 / (alpha - 1))
到目前为止,self取了我的一个参数s.t.三角洲保持空洞......
答案
您需要在调用方法之前创建AgentCOne
的实例。在最简单的情况下,您可以创建没有参数:
AgentCOne().k_bar(alpha, beta, delta)
或者由于AgentCOne.k_bar
似乎没有使用实例中的任何状态(没有引用self),您可以考虑将其设置为静态。
另一答案
看起来你应该使k_bar
成为一种静态方法:
class AgentCrra:
@staticmethod
def k_bar(alpha, beta, delta):
"""non-stochastic steady-state for capital"""
return ((1 / beta - 1 + delta) / alpha) ** (1 / (alpha - 1))
这应该允许您的单元测试运行。
以上是关于Python,Py.test:如何包含另一个类的本地函数而不是py.tested?的主要内容,如果未能解决你的问题,请参考以下文章
如果 py.test 从另一个目录执行它,coverage.py 不会覆盖脚本
在 boost.python 中;如何公开包含在另一个类中的类(通过组合)?
在 boost.python 中;如何公开包含在另一个类中的类(通过组合)?