2012-06-07 4 views
5

私のテストの多くは同じものがたくさんあります。/tearDown()のことが起こっています。私の単体テストのすべてのものに同じコードをコピーして貼り付けるのは愚かなようです。私はWebTestCaseを拡張して、私の他のテストを拡張できる新しいテストクラスを作りたいと思う。WebTestCaseを拡張してSymfony2単体テストをもっと乾燥させる

私の問題は、私は本当にどのように知っていないということです。まず、この新しいクラスを置く最も適切な場所はどこですか?私はちょうど私のTestsのフォルダの中で1つを作ろうとしましたが、私のテストのどれも実際にクラスを見つけることができませんでした。たぶん私は名前空間を理解できません。

私が話している方法で誰もがWebTestCaseを拡張しましたか?もしそうなら、どうしたのですか?

答えて

4

私はこれを行っていないが、私はおそらくちょうど私は通常私のテストではそう

のsrc /あなた/バンドル/テスト/ WebTestCase.php

<?php 

namespace Your\Bundle\Test 

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase as WTC; 

class WebTestCase extends WTC 
{ 
    // Your implementation of WebTestCase 
} 
+1

は、私はエラーを取得しています。Class「をあなたの\バンドル\テスト\のWebTestCase」テストで発見しません。 symfonyにクラスをロードさせるにはどうすればいいですか? –

2

のようにそれを行うだろうPeterが提案した方法でWebTestCaseを拡張します。さらに、私は私ののWebTestCaseでAppKernelを利用できるようにするrequire_onceを使用します。

<?php 

namespace My\Bundle\Tests; 

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase as BaseWebTestCase; 

require_once(__DIR__ . "/../../../../app/AppKernel.php"); 

class WebTestCase extends BaseWebTestCase 
{ 
    protected $_application; 

    protected $_container; 

    public function setUp() 
    { 
    $kernel = new \AppKernel("test", true); 
    $kernel->boot(); 
    $this->_application = new \Symfony\Bundle\FrameworkBundle\Console\Application($kernel); 
    $this->_application->setAutoExit(false); 

... 

私のテストでは、このようになります。

<?php 

namespace My\Bundle\Tests\Controller; 

use My\Bundle\Tests\WebTestCase; 

class DefaultControllerTest extends WebTestCase 
{ 
    public function testIndex() 
    { 
... 
2

あなたはAppKernelを含めることのWebTestCaseを拡張する必要はありません。あなたは、次のアプローチ

$client = static::createClient(); 
    self::$application = new Application($client->getKernel()); 
0

この質問は本当に古いですが、それはGoogleでかなりの高ランクを使用することができますので、私は、私は私の解決策を追加しようと思いました。

WebTestCaseをデフォルトのsetUpメソッドとlogInメソッドで拡張したので、認証テストをより簡単に実行できるようになりました。

ユニットテストで見つからないため、testsディレクトリに標準クラスを追加できないようです。なぜ私は分からない。私の解決策は、ディレクトリsrc/_TestHelpersを追加し、そこにヘルパークラスを配置することでした。

だから私は持っている:

# src/_TestHelpers/ExtendedWTC.php 
namespace _TestHelpers; 

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 

class ExtendedWTC extends WebTestCase 
{ 
    # Do your cool extending here 
} 

# tests/AppBundle/Controller/DefaultControllerTest.php 
namespace Tests\AppBundle; 

use _TestHelpers\ExtendedWTC 

class DefaultControllerTest extends ExtendedWTC 
{ 
    # Your tests here, using your cool extensions. 
} 

注:私のテストはtests/なくsrc/AppBundle/Tests/である理由を、私はそれゆえ、Symfony 3ディレクトリ構造を使用しています。あなたの方法を使用して

私はこれが誰かの役に立てば幸い

...

関連する問題