モックオブジェクトを使用するときに気付いていますが、PHPUnitは実行されたテストの数を正しく報告しますが、作成しているアサーションの数を誤って報告します。実際には、私はそれを別の主張としてカウントします。 6つのテスト、7つのアサート・ステートメント、および各テスト・モックのテスト・ファイルは、6つのテスト、13のアサーションを報告しました。模倣があなたのアサーション数に影響しますか?
ここでは、1つのテストを除くすべてのテストが削除されています(ここでは例として)。また、この問題を突き止めるためにスタブを付けない別のテストを紹介しました。 PHPUnitは2つのテスト、3つのアサーションを報告します。私はダミーを削除します:1テスト、2アサーション。
require_once '..\src\AntProxy.php';
class AntProxyTest extends PHPUnit_Framework_TestCase {
const sample_client_id = '495d179b94879240799f69e9fc868234';
const timezone = 'Australia/Sydney';
const stubbed_ant = "stubbed ant";
const date_format = "Y";
public function testBlankCategoryIfNoCacheExists() {
$cat = '';
$cache_filename = $cat.'.xml';
if (file_exists($cache_filename))
unlink($cache_filename);
$stub = $this->stub_Freshant($cat);
$expected_output = self::stubbed_ant;
$actual_output = $stub->getant();
$this->assertEquals($expected_output, $actual_output);
}
public function testDummyWithoutStubbing() {
$nostub = new AntProxy(self::sample_client_id, '', self::timezone, self::date_format);
$this->assertTrue(true);
}
private function stub_FreshAnt($cat) {
$stub = $this->getMockBuilder('AntProxy')
->setMethods(array('getFreshAnt'))
->setConstructorArgs(array(self::sample_client_id, $cat, self::timezone, self::date_format))
->getMock();
$stub->expects($this->any())
->method('getFreshAnt')
->will($this->returnValue(self::stubbed_ant));
return $stub;
}
}
フレームワークの模擬方法の1つにアサーションが残っているようです。すべての(合格)アサーションが行われていることを示す方法はありますか?
私が見ている動作は故意です。アサーションカウンタをインクリメントするverifyMockObjects()には、それを上書きしないようにする理由が必要です。私はそれと一緒に暮らすだろうし、回避策でテストコードさえも捨てるつもりはない。たぶん、なぜ私はそれがこのようなものなのか理解していますが、私はそれがどこにも言及されていないことに驚いています。 – jontyc
テストの一環としてモックを使用しているときは意味があります:「Xを呼び出すとモックでYが呼び出されますが、そうでなければテストは壊れています。しかし、テストを容易にするためにスタブとしてモックを使用している場合、それはちょうどノイズです。「Xを呼び出すにはYを呼び出す必要がありますが、単にfalseが必要です。結局のところ、私はアサーションの数を何にも使わないので、それは問題ではありません。 –