Python、Py.test:如何包含另一个 class 的局部函数而不是 py.tested?

Python, Py.test: How can I include local function of another class than that is 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 似乎没有使用实例中的任何状态(没有对自身的引用),您可以考虑将其设为静态。

看来您应该将 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))

这应该允许您的单元测试运行。