1

私は現在、Symfony2 の Bitcoin Payment Bundle に取り組んでいます。私の githubで見ることができます。完全にテスト駆動で開発されたわけではありませんが (まだ期待しています)、可能な限りテストでカバーされるようにしています。

Bundle には、インターフェイスAbstractCommand を実装するクラスが含まれていCommandInterfaceます。抽象クラスであるため、すべてのインターフェースのメソッドを実装する必要はありません。偉大な。

次に、AbstractCommandTestテストケースがあります。validateParametersメソッドがうまく機能することをテストします。テストはクラスのすべての行をカバーします。しかし... IDE(PHPプラグインを使用したIntelliJ Idea)でテストカバレッジ分析を実行すると、カバレッジが魔法の93%であることが示されます。赤い色でマークされた行がないため、これは二重に奇妙です(デフォルトの配色を変更したので、よくわかります;))。

質問は:なぜですか?PHPUnitのバグですか?それとも、クラスモデルの構築の問題ですか?AbstractCommand 内に抽象メソッドがある場合 (およびインターフェイスがない場合)、それらもカバーされませんでした。

4

2 に答える 2

2

ご覧のとおり、メソッドcatchからのステートメントをカバーしていない可能性があります。validateParameters

別のテストで例外ParameterBugをスローするために、引数をモックとして作成してみてください。\InvalidArgumentExceptionこれはあなたが望むものをカバーするはずです(しかし、それを可能にするためには、validateNameメソッドを保護されたものに変更する必要があります):

$parameterSetMock = $this->getMock('AppropraiteNamespace\ParameterSet', array('validateName'));
$parameterSetMock->expects($this->any())
    ->method('validateName')
    ->will($this->throwException(new \InvalidArgumentException);

もう一つ:

テストで try/catch ブロックを使用していません。使用する場合:

 $this->setExpectedException('ExpectedException', 'Expected Message');

テストの開始時に、予期される例外がスローされない場合、テストは失敗します。

于 2012-12-04T09:41:18.737 に答える
0

クローバーカバレッジファイルを調べたところ、その問題は解決しました。それが示している:

<file name="/srv/bundles-src/payment-bitcoin/Bitcoin/Client/Command/AbstractCommand.php">
    <class name="AbstractCommand" namespace="Wikp\Payment\BitcoinBundle\Bitcoin\Client\Command">
      <metrics methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="13" coveredstatements="13" elements="15" coveredelements="15"/>
    </class>
    <line num="0" type="stmt" count="0"/>
        <!-- coverage data for methods -->
    <line num="36" type="stmt" count="0"/>
    <metrics loc="35" ncloc="35" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="13" coveredstatements="13" elements="15" coveredelements="15"/>
  </file>

AbstractCommand ファイルを見ると、36 行目はクラス定義の後の空白行です。削除すると、カバレッジは 100% になります。これは IntelliJ/PHPStorm の問題だと思います。

于 2012-12-16T18:47:41.243 に答える