Python 单元测试一个MixIn类,该类正在其方法之一中访问另一个类方法
我有两个交友班。Mixin类中的一个方法正在从另一个类调用一个方法。当我通过继承这两个mixin来创建一个子类时,一切都很好Python 单元测试一个MixIn类,该类正在其方法之一中访问另一个类方法,python,design-patterns,Python,Design Patterns,我有两个交友班。Mixin类中的一个方法正在从另一个类调用一个方法。当我通过继承这两个mixin来创建一个子类时,一切都很好 class FirstMixin(object): def method(self): some logic here self.method_of_sub_class() class SecondMixin(object): def method_of_sub_class() pass clas
class FirstMixin(object):
def method(self):
some logic here
self.method_of_sub_class()
class SecondMixin(object):
def method_of_sub_class()
pass
class BaseClass(SecondMixin, FirstMixin):
pass
当我为FirstMixin类编写单元测试用例时,它失败了,因为调用了子类的方法。如何为从另一个类调用方法的第一个MixIn类编写单元测试用例?@chepner是正确的;您的单元测试遇到了问题,因为您的类没有完全封装。FirstMixin应该只调用直接可用的方法。在不了解程序的更大体系结构的情况下很难说,但一个解决方案可能是在
FirstMixin
子类中添加一个passthroughmethod\u作为抽象方法,尽管这会导致相当复杂的设计。更好的办法可能是问问自己,如果FirstMixin需要调用SecondMixin中定义的方法,那么为什么需要两个单独的mixin呢。从FirstMixin.method
调用\u子类的method\u意味着FirstMixin
与SecondMixin
@chepner的耦合过于紧密,谢谢大家的评论。我可以解释这个设计背后的原因,我保留这个子类作为其他类的基类。我可以将第一个和第二个Mixin方法添加到子类中并解决这个问题,但大多数情况下我不需要第一个和第二个Mixin方法。我认为应该将子类名称重命名为基类。抱歉造成混淆。也许FirstMixin
应该继承自SecondMixin
?即使您的混合插件用例总是将它们一起使用,它们仍然应该被设计为每个插件都可以单独使用。至少您的混合插件中有一个看起来不像是混合插件,而是BaseClass
的基础。感谢您的建议。我可以在unittest类中使用一个虚拟类来一起测试功能吗?比如类下虚拟(FirstMxin,MainClass):pass