最近私は単体テストの使用を開始しましたが、これまでのところ爆発的でした。治具データをテストする
しかし、私は自分のアプローチが間違っていると感じ、「良い」ソリューションの周りを頭で覆うことができない状況にぶつかってきました。
コードのコンテキストは、sfPHPUnit2Pluginでテストしたsymfonyで書かれたテレビ放送スケジュールを表示するアプリケーションです。
public function testLoadChannelBroadcasts() {
$Start = new DateTime();
$End = new DateTime();
$Channels = ChannelTable::getChannelsWithBroadcastsTouchingTimeSpan($Start, $End);
foreach ($Channels as $Channel) {
$Channel->loadBroadcastsTouchingTimeSpan($Start, $End);
}
// test data
$Broadcasts = $Channels[0]->Broadcasts;
$assertion = $Broadcasts[0]->getDateTimeObject('start') <= $Start
&& $Broadcasts[0]->getDateTimeObject('end') >= $Start;
$this->assertTrue($assertion, 'starts before scope, ends inside scope');
$assertion = $Broadcasts[1]->getDateTimeObject('start') >= $Start
&& $Broadcasts[1]->getDateTimeObject('end') <= $End;
$this->assertTrue($assertion, 'starts inside scope, ends inside scope');
$assertion = $Broadcasts[2]->getDateTimeObject('start') >= $Start
&& $Broadcasts[2]->getDateTimeObject('end') >= $End;
$this->assertTrue($assertion, 'starts inside scope, ends outside scope');
$LongBroadcast = $Channels[1]->Broadcasts[0];
$assertion = $LongBroadcast->getDateTimeObject('start') <= $Start
&& $LongBroadcast->getDateTimeObject('end') >= $End;
$this->assertTrue($assertion, 'starts before scope, ends after scope');
}
試験は、本方法の目的を伝達するが、データ(フィクスチャ)のテストデータが含まれているかについての仮定に大きく依存しています。これにはより良いアプローチがありますか?あなたがChannelTable
を呼び出すことにより、その境界の外の方法をテストしているので、それは、今あるよう