私はユニットテストに関する質問があります。UnitTestingヘルプ:スタブを使用していますか?
私は関数を呼び出して関数Aと呼び、クラスBのインスタンスを入力として受け取り、真または偽を返します。
私のテストでは、どうにかして関数Aに渡すオブジェクトを作成する必要があります。私が現在行っていることは、そのコンストラクタを使ってクラスBを初期化し、そのメソッドのいくつかを呼び出してそれを作成し、正しい構造体を作成し、それを関数Aに渡すことです。良いパターンです:特にクラスBのメソッドにバグがある場合や、インターフェースを変更する場合はどうなりますか?
だから私はスタブを使う必要があると思います。私のクラスBと基本的に同じ構造を持つクラスを書くのは変です。また、関数Aは最終的にクラスBで動作するので、クラスBのインターフェースを変更すると、関数Aのテストがクラッシュして、新しいインターフェースを受け入れるために関数Aを変更するよう指示されます。
正しいパターンは何ですか?
注:これは主に意見に基づいていると思われる場合は、次のように改訂してください。「ユニットテストの技術」で提唱されている原則によれば、ここでは何がベストでしょうか? - 正気です、あなたの残りのために、より大きな視点で答えを書くこと自由に感じ
編集が
私は明確にすべき、関数Aの唯一の目的は、クラスBのインスタンスを取ることで、特定の条件が満たされていることを確認します。今、私はクラスBの代わりにスタブを作成することができましたが、これは意味をなさないとは確信していません。むしろ意味がないように思えます。一方、Bを初期化するには、classB.addData(randomData)のような処理を行います。このコードが失敗するとどうなりますか?実際の問題は、クラスB
編集2 より明示的に機能が何を示していくつかのコードの初期化をしている間、私は、関数Aのためのテストでエラーが発生します。方法はより複雑ですが、それ以外はまったく同じ
def functionA(objectB):
return objectB.data < 10
def testFunctionA():
objectB = classB()
objectB.addData(19) #Is this a problem or should I stub objectB?
assert(functionA(objectB) is False)
具体的な答えを具体的に投稿する必要があると思います。今、疑問はすべて抽象的で理論的であり、抽象的な答えに役立ちます。具体的な回答が必要な場合は、問題を示すコードが役立ちます。 – Kritner
@Kritner私はいくつかのコードを追加しました..実際のコードは本質的にこれと同じです。メソッドは長いかもしれませんが、本質的に同じ – Ant
はこのpythonですか?私はPythonを知らないのですが、 'functionA'は' objectB.data' gt 10が 'true'を返し、そうでなければ' false'を返します。それがあなたの主張が失敗しないだろうか? – Kritner