2017-10-07 18 views
0

のためにそのスタブを持つクラスを交換してください。この目的のために、high_cost_method()をオーバーライドするためにAuxiliaryClassStubクラスを作成しました。私のテストでdo_something()MyTestedClassから実行したいが、do_something()は実クラスの代わりにスタブを使うべきだ。
どうすればいいですか?
私の実際の補助クラスはかなり大きく、メソッドがたくさんあり、多くのテストでそれを使用するため、単一のメソッドにパッチを当てたくありません。私はテスト中にクラス全体を交換する必要があります。は、私はコード例を以下しているテスト

high_cost_method()は静的なので、この場合は__init__()または__new__()を参考にしてください。

答えて

0

self.__class__.high_cost_methoddo_somethingの内部で使用すると機能しますか?こうすることで、クラス名への直接参照を避けることができます。これにより、静的メソッドをサブクラス化してAuxiliaryClassのメソッドでオーバーライドできるようになります。

class MyTestedClass: 
    def do_something(self): 
     something = self.__class__.high_cost_method() 
     something() 

    @staticmethod 
    def high_cost_method(): 
     print("high cost MyTestedClass") 


class AuxiliaryClass(MyTestedClass): 
    @staticmethod 
    def high_cost_method(): 
     print("high cost AuxiliaryClass") 

はその後あなたが得る

test = AuxiliaryClass() 
test.high_cost_method() 

高コストAuxiliaryClass

とそうでない

test = MyTestedClass() 
test.high_cost_method() 

高いですコストMyTestedClass

+0

私は良い解決策だとは思わない。私はクラスを変更する必要があります。私は自分のコードにできるだけ少ない変更を加え、すべてのテストを嘲笑したいと思っています。 – Djent

関連する問題