3

カスタムテスト実行順序でテストスイートをセットアップする方法について、PHPUnit マニュアルに従ってみました。スイートを機能させるには、これらの行といくつかのインクルードのみが必要であることに気付きました。

public static function suite()
{
    $suite = new PHPUnit_Framework_TestSuite('Package');
    return $suite;
}

しかし、上記の行を使用すると、テストの実行順序はインクルードの並べ替え順序によって定義されます。次のように suite() を介して変更しようとすると、テストは 2 回実行されます。最初は suite() で定義された並べ替え順序で実行され、その後はインクルードの並べ替え順序で実行されます。

public static function suite()
{
    $suite = new PHPUnit_Framework_TestSuite('Package');
    $suite->addTestSuite('Package_Class1Test');
    $suite->addTestSuite('Package_Class2Test');
    $suite->addTestSuite('Package_Class3Test');
    return $suite;
}

インクルードは次の方法で行われます。

require_once 'Package/Class3Test.php';
require_once 'Package/Class2Test.php';
require_once 'Package/Class1Test.php';

結果 (テスト実行順序):

1) Class1Test
2) Class2Test
3) Class3Test
4) Class3Test
5) Class2Test
6) Class1Test

Netbeans 7.0beta を使用して、Windows 7 で PHP 5.3.5 / PHPUnit 3.5.11 を実行しています。phpunit のマニュアル (http://www.phpunit.de/manual/3.5/en/organizing-tests.html) を読みました。しかし、私は何が間違っているのか分かりません...

助けてください。

PS: この問題は、クラスを自動ロードすることで解決できます。

4

2 に答える 2

1

PHPUnit 3.5 は 5 年前にリリースされ、4 年間サポートされていません。しかし、5 年前でさえ、PHPUnit_Framework_TestSuiteオブジェクトを使用してテスト スイートを構成することは、もはや適切な方法とは見なされていませんでした。

テスト スイートを適切に構成する方法については、PHPUnit Web サイトのGetting Startedの記事と、PHPUnit マニュアルのテストの構成に関する章をお読みください。

于 2015-06-20T05:08:35.127 に答える
0

phpunit適切なパラメータで呼び出していますか?

私はこのセットアップを持っています。これはスイートでうまく機能します。

/tests/
/tests/allTests.php
/tests/lib/
/tests/lib/libAllTests.php
/tests/lib/baseTest.php
/tests/lib/coreTest.php
/tests/lib/...

allTests.php:

require_once 'lib/libAllTests.php';
class AllTests
{
    public static function suite()
    {
        $suite = new PHPUnit_Framework_TestSuite('Project'); 
        $suite->addTestSuite('LibAllTests');     
        return $suite;
    }
}

libAllTests.php:

require_once 'baseTest.php';
require_once 'coreTest.php';    
class LibAllTests
{
    public static function suite()
    {
        $suite = new PHPUnit_Framework_TestSuite('Lib'); 
        $suite->addTestSuite('CoreTest');
        $suite->addTestSuite('BaseTest'); 
        return $suite;
    }
}

コマンドプロンプトから、次のように呼び出すことができます。

  • phpunit /tests/allTests.php:すべてのテストを実行します
  • phpunit /tests/lib/libAllTests.php:すべてのlibテストを実行します
  • phpunit /tests/lib/baseTest.php:すべての基本テストを実行します
  • phpunit /tests/*:すべてのテストを実行します

また、4つのシナリオすべてで、コアテストはベーステストの前に実行され、テストは2回繰り返されません。

私はphpUnit3.5.7を使用しています。

于 2011-02-13T15:39:11.163 に答える