4

PHPサイトを構築/テストするためにHudsonが使用するPhingスクリプトがあります。

一部の単体テストでは、メイン関数ライブラリが読み込まれます。他の人は、そうする必要を避けるために(またはテストのために特定の偽の結果を提供するために)モックを使用します。

単体テストは、単独で実行すると(つまり、コマンドラインでを使用してphpunit)、すべて完全に実行されます。ただし、Phingでバッチとして一緒に実行すると、エラーが発生します。

エラーは、特定の関数のモックを作成したテストにあります。エラーは、関数を2回宣言していることを示しています。明らかに、モックだけでなく実際の関数ライブラリも含めようとしています。

テストには相互に排他的なコードが含まれているため、互いに分離して実行する必要があります。Phingはそれらすべてを単一のプロセスで実行しているように見えるため、インクルードが衝突しています。

phingスクリプトの関連部分は次のようになります。

<phpunit haltonfailure="true" printsummary="true">
  <batchtest>
    <fileset dir="${ws}/path/to/site/root/">
      <include name="*Test.php" />
      <include name="*/*Test.php" />
      <include name="*/*/*Test.php" />
      <include name="*/*/*/*Test.php" />
    </fileset>
  </batchtest>
  <formatter type="xml" todir="${builddir}/logs" outfile="units.xml" />
</phpunit>

ビルドスクリプトで各テストを個別に指定せずに、phingでテストを相互に独立して実行する方法はありますか?

4

1 に答える 1

1

最も簡単で最速の回避策は、「phingタスクを使用せずに、「実際の」phpunit出力の使用を開始することです。

だから走っている<exec command="phpunit ... "> [...]

--coverage-htmlを使用し、それをhudsonで公開し、-coverage-cloverとjunitスイッチを使用してカバレッジ情報をhudsonに取得します。(jenkins-php.orgまたはSetting up jenkins for php projects (there is a demo phpunit.xml.dist)参照用)


しかし、たぶんあなたはそうしたくないでしょう:/

とにかく、スイッチfrom the Phing docs of the phpunit taskを使用するようにphingに直接指示する方法がわかりません。--process-isolation

だから多分誰か他の人がその解決策を持っています。それでもコードカバレッジを生成するものはありません。

コメントから

単一のプロセスでは実行できない2つの別個のテストコードがあると想定するので、次のように言うことが理想的です。

run 2 processes: "testsuite one do that, testsuite two do the other thing"
after that aggregate the results

悲しいことに、phpunitにそうするように指示する方法がわかりません。さらに調査しますが、今のところ確実に機能することがわかっているのは、--process-isolationテストスイート全体で各テストを使用することだけです。スイート全体を1つの別々のプロセスで実行する方法がある場合、それについてはわかりません。


うまくいけば、他の誰かがこれに対するより簡単な解決策を持っています:)

于 2011-03-18T18:57:54.003 に答える