问题描述
我正在使用pybind11为某些C ++代码实现python绑定。现在,我正在尝试为绑定编写单元测试。
class A
{
A(std::unique_ptr<B> B_ptr);
}
它接受unique_ptr
对象的class B
。 class B
是可以派生的抽象基类。我编写了绑定,使得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