python - 如何使 Python 模拟从基类派生?

标签 python c++ mocking pybind11

我正在使用 pybind11 为一些 C++ 代码实现 python 绑定(bind)。现在我正在尝试为绑定(bind)编写单元测试。
有一个class A在 C++ 中,构造函数如下:

class A
{
    A(std::unique_ptr<B> B_ptr);
}
它接受 unique_ptrclass B 的对象. class B是一个可以派生的抽象基类。我已经编写了这样的绑定(bind) class B可以从 Python 派生。是否可以使用 unittest.mock 创建 Python 模拟?源自 class B这样A会在其构造函数中接受模拟吗?

最佳答案

模拟可以有 spec当定义时,他们借用他们报告的类(以及许多其他基本行为)。所以最简单的方法是这样做:

mymock = Mock(spec=B())  # Mock borrows behaviors of this instance of B, including class
如果您不想使用 spec (它有许多其他副作用),您可以对报告的类进行有针对性的修改。 Mock s have an assignable __class__ attribute , 所以这将使一个空白 Mock将自己报告为 B 的子类:
mymock = Mock()
mymock.__class__ = B

关于python - 如何使 Python 模拟从基类派生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63975640/

相关文章:

python - 未成功追加到空 NumPy 数组

c++ - 如果不知道数组的大小,LLVM GEP 安全吗?

java - 在 Java 中模拟 DTO 的最佳方法是什么?

javascript - 测试库错误 : mockConstructor(. ..):渲染没有返回任何内容

python - 动态设置局部变量

python - 如何根据数字制作颜色

c++ - 如何将现有对象的地址分配给智能指针?

javascript - v8:为什么 javascript 中的函数调用比 C++ 中的函数调用更快

unit-testing - Mockist tdd : How to test UUT when collaborator can only be constructed inside UUT?

python - python中既没有属性也没有方法的对象