代码之家  ›  专栏  ›  技术社区  ›  econstud12345

Python,Py。测试:如何包含另一个类的局部函数,而不是py。测试?

  •  -1
  • econstud12345  · 技术社区  · 6 年前

    我的测试模块中有:

    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.delta保持为空。。。

    2 回复  |  直到 6 年前
        1
  •  1
  •   avigil    6 年前

    您需要创建的实例 AgentCOne 在对其调用方法之前。在无需参数即可创建的最简单情况下:

    AgentCOne().k_bar(alpha, beta, delta)
    

    还是从那以后 AgentCOne.k_bar 似乎没有使用实例中的任何状态(没有对self的引用),您可以考虑将其设置为静态。

        2
  •  0
  •   quamrana    6 年前

    看起来你应该 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))
    

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