私はユニットテストと一般的なテストにまったく慣れていません。私はphpUnitを使用して開発していますが、私の質問はより一般的/設計上の質問であるため、実際の環境はそれほど重要ではありません。
テストケースをできるだけ具体的に書くのは良い習慣だと思います。例(遅いほど良い):
assertNotEmpty($myObject); // myObject is not Null
assertInternalType('array', $myObject); // myObject is an array
assertGreaterThan(0, count($myObject)); // myObject actually has entries
それが正しければ、ここに私の質問があります:
テスト対象のオブジェクトの状態が外部ソース(つまりDB)に依存している場合、または一般的に、テストケース内にフロー制御を記述することは受け入れられている方法ですか?
好き:
if (myObject !== null) {
if (count(myObject) > 0) {
// assert some Business Logic
}
else {
// assert some different Business Logic
}
}
テストケース内のこの種のフロー制御は許容されますか、それとも「コードの臭い」であり、回避する必要がありますか?よろしければ、ここで覚えておくべきヒントや実践はありますか?