Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 单元测试一个MixIn类,该类正在其方法之一中访问另一个类方法_Python_Design Patterns - Fatal编程技术网

Python 单元测试一个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

我有两个交友班。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

class BaseClass(SecondMixin, FirstMixin):
    pass

当我为FirstMixin类编写单元测试用例时,它失败了,因为调用了子类的方法。如何为从另一个类调用方法的第一个MixIn类编写单元测试用例?

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