小编moj*_*jo2的帖子

Python Patch/Mock 类方法但仍调用原始方法

我想使用补丁来记录对单元测试类中的函数进行的所有函数调用,但需要原始函数仍按预期运行。我在下面创建了一个虚拟代码示例:

from mock import patch

class A(object):
    def __init__(self):
        self._a = 1

class B(A):
    def __init__(self):
        super(B, self).__init__() # TypeError: super() argument 1 must be type, not MagicMock
        self._b = 11

    def bar(self, b):
        self._b = self._b + 1 + b

    def foo(self, b):
        self.bar(b)

class MockB(B):
    def foo(self, b):
        super(MockB, self).foo(self, b)

@patch('main.B')
def main(b_class):
    b_class.side_effect = MockB

    b = B()

    print b._b # 11
    b.foo(0)
    print b._b # 12

main()
Run Code Online (Sandbox Code Playgroud)

就我而言,该类的实例b = B()实际上不在主函数中,而是在另一个模块中,因此我无法模拟该实例。我需要它一般作为 B 的所有实例的装饰器。

总结:我不确定如何单独模拟类方法,但仍然调用原始方法。之后,我想使用 …

python mocking

18
推荐指数
1
解决办法
6055
查看次数

函数模板的 C++ Decltype

我想创建一个重载模板,如果一个类包含它,它会运行一个函数 Foo() ,否则它什么都不做。

class A
{
public:
    template <typename U>
    void Foo(U& u)
    {
        std::cout << "Has Foo()" << std::endl;
        // Modify u
    }
};

class B
{
    // Does not contain Foo()
};
Run Code Online (Sandbox Code Playgroud)

我一直在尝试运行它

template <typename T, typename U>
decltype(std::declval<T>().Foo()) TriggerFoo(T* t, U& u)
{
    t->Foo(u);
}
template <typename T, typename U>
void TriggerFoo(T* t, U& u)
{
    std::cout << "Does not have Foo()" << std::endl;
}

int main()
{
    A a;
    B b;
    U u;     // Some type …
Run Code Online (Sandbox Code Playgroud)

c++ templates

5
推荐指数
2
解决办法
2575
查看次数

标签 统计

c++ ×1

mocking ×1

python ×1

templates ×1