15

依存性注入を使用してconfig.ymlのパラメーターを使用して構築されたSymfony2サービスがあります。現在、単体テストを試みていますが、単体テストではコンテナーにアクセスできないため、サービスにアクセスできないことがわかりました。したがって、モックデータを使用して自分で作成する必要があります。configパラメーター(最初にconfig_test.yml、次にconfig.ymlなど)を読み取ることができれば意味がありますが、それも不可能のようです。これは、構成ファイルの代わりに初期化パラメーターをテストにコーディングする必要があるため、サービスの単体テストを面倒にするようです。

単体テスト中にconfig.ymlのパラメーターを使用してサービスを構築する方法が本当にない場合、それがBadThing™である理由についてのロジックを知っている人はいますか?

4

4 に答える 4

14

これは私のために働きます:

class MyServiceTest extends WebTestCase
{
    public function testCookies()
    {
        $client = static::createClient();

        $myParams = $client->getKernel()->getContainer()->getParameter('my_params');
    }
}
于 2014-12-03T15:36:50.103 に答える
8

自分のテストで構成パラメーターが必要だったので、この投稿を見つけました。これはGoogleでの最初のヒットでした。

ただし、これは機能するソリューションです。もっと良いものがあるかもしれません。

<?php

...

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

class MediaImageTest extends WebTestCase
{
    private $_application;
    private $storagePath;

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

         $this->storagePath = $this->_application->getKernel()->getContainer()->getParameter('media_path');
    }

    ...
}

あなたもこれを調べるかもしれません:ユニットテストを介してSymfony2コンテナにアクセスしますか? 単体テスト内でカーネルにアクセスするためのはるかにクリーンなソリューションです。

于 2013-05-28T08:14:23.190 に答える
4

ユニットテストとは、あるクラスを他のクラスから分離してテストすることです。サービスを単体テストするために、構成から何も読み取る必要はありません。テストで値を渡すだけです。結局、それは他の値で機能する可能性がありますよね?

もちろん、受け入れられた値の周りに何らかの論理/検証がある場合は、おそらくテストでそれをカバーする必要があります。構成からこの値を取得する場合は、どのように行うかを考えてください。異なる値で動作をテストすることはできません。

アプリケーションが正しく機能しているかどうかを確認したい場合(クラスは期待どおりに連携します)、機能テストまたは受け入れテストツール(Behatなど)を使用します。

于 2012-10-23T22:28:34.337 に答える
0

私はSymfony3.2.2を使用していますが、これはあなたにも役立つと思います。

それは単なる行です:

$export_dir = static::$kernel->getContainer()->getParameter('export_dir');
于 2017-01-17T18:27:34.550 に答える