単体テストの対象となるコードを変更しています。ユニットテストの内部では、次のようなことが起こります。関数であるオブジェクトに対する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しているというハックな解決方法があります。
さらに良い方法は、関数オブジェクトが別のクラスのインスタンスを返すかどうかです。
? –
関数オブジェクト 'cls'が表すクラスは、別のクラスのインスタンスです。私は 'isinstance(cls()、Foo)'に相当するものを望みますが、 'isinstance(cls、Foo)'のように動作します。 – Batman
関数 'cls'が返す*は何ですか? –