5

私のテストの多くは、同じことがたくさん起こっていますsetUp()tearDown()単体テストのすべてに同じコードをコピーして貼り付けるのはばかげているようです。他のテストを拡張できる新しいテスト クラスを作成したいと考えていますWebTestCase

私の問題は、その方法がわからないことです。まず、この新しいクラスを配置するのに最適な場所はどこですか? フォルダー内に作成しようとしましTestsたが、どのテストでも実際にクラスを見つけることができませんでした。名前空間を理解していないだけかもしれません。

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

4

4 に答える 4

4

私はこれをしていませんが、たぶんそうするだけでしょう

src / Your / Bundle / Test / WebTestCase.php

<?php

namespace Your\Bundle\Test

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

class WebTestCase extends WTC
{
  // Your implementation of WebTestCase
}
于 2012-06-07T19:47:08.930 に答える
2

私のテストでは、通常、Peter が提案した方法で WebTestCase を拡張します。さらに、require_once を使用して、WebTestCase で AppKernel を使用できるようにします。

<?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()
    {
...
于 2012-06-08T17:46:43.760 に答える
2

AppKernel を含めるために WebTestCase を拡張する必要はありません。次のアプローチを使用できます

    $client = static::createClient();
    self::$application = new Application($client->getKernel());
于 2013-03-15T15:14:43.550 に答える
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.
}

注:私はSymfony 3ディレクトリ構造を使用しているため、テストtests/src/AppBundle/Tests/.

これが誰かに役立つことを願っています...

于 2016-04-20T06:18:53.990 に答える