2016-12-02 5 views
1

単体テストの対象となるコードを変更しています。ユニットテストの内部では、次のようなことが起こります。関数であるオブジェクトに対するisinstanceの等価物

def create_object(cls, arg1=None, arg2=None, arg3=None, **kwargs): 
    kwargs['arg1'] = arg1 or DEFAULT1 
    kwargs['arg2'] = arg2 or DEFAULT2 
    kwargs['arg3'] = arg3 or DEFAULT3 
    return cls(kwargs) 

基本的には、テストを書くときに省略表現を使用できるようにするためのものです。

インスタンス化されていないオブジェクトクラスの中には、kwarg以外の引数を1つだけ必要とするリファクタを行ったばかりです。リファクタはコード本体では意味がありますが、テストは失敗します。私はむしろ、最も簡単な解決策はclsが実際にある何のインスタンスではありませんので、これは当然のことながら失敗し

if isinstance(cls, Foo): 
    return cls(kwargs, True) 
else: 
    return cls(kwargs) 

ようになり、最初からすべての失敗のテストを書き換えないだろうことを考えると

Fooのインスタンス。

現時点では、kwargsにフラグを追加し、それが存在するかどうかを確認し、それが存在する場合はpopをpingしているというハックな解決方法があります。

さらに良い方法は、関数オブジェクトが別のクラスのインスタンスを返すかどうかです。

+0

? –

+0

関数オブジェクト 'cls'が表すクラスは、別のクラスのインスタンスです。私は 'isinstance(cls()、Foo)'に相当するものを望みますが、 'isinstance(cls、Foo)'のように動作します。 – Batman

+0

関数 'cls'が返す*は何ですか? –

答えて

1

それはあなたが望むように聞こえる

issubclass(cls, Foo) 
まさにあなたがチェックしようとしている何
+0

ありがとうございます。それはまさに私が望んでいたものです。 – Batman

+1

これが私には尋ねられていたことをあなたがどのように直感していたのですか、笑 –

関連する問題