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 不会覆盖脚本

我可以跨同一个 python 包的模块重用导入吗?

在 boost.python 中;如何公开包含在另一个类中的类(通过组合)?

在 boost.python 中;如何公开包含在另一个类中的类(通过组合)?

如何创建一个包含另一个类的对象数组的类,如何操作其他类的私有属性

如何配置 PyCharm 以运行 py.test 测试?