2014-10-26 44 views
4

我有一個單元測試的應用程序,我們已經從symfony 2.3更新到2.6。我們遵循所有升級文檔,只能更改一些小的內容。 除了PHPUnit測試外,一切工作都很完美。Symfony 2.6重寫PHPUnit_Framework_Error

我們有2個獨立運行,一個用於測試實體類,它是在預提交鉤子上觸發的。第二個運行全套設備,數據庫設置和整個九碼。

現在,因爲升級到2.6,在單元測試拋出的PHPUnit_Framework_Error已被取代的Symfony的Symfony\Component\Debug\Exception\ContextErrorException,這個失敗的所有類似的測試:

/** 
* @dataProvider objectTestDataProvider 
* @expectedException \PHPUnit_Framework_Error 
*/ 
public function testCanNotSetClientToArbitraryValue($value) 

現在我不想更換成新本因爲運行僅限實體的測試套件的異常不依賴於symfony組件,因此symfony未加載,因此錯誤是常規的PHPUnit_Framework_Error,因此更改它會導致這些測試失敗。

換句話說,當我運行一個測試類它的工作原理,一旦symfony的依賴性測試運行,它失敗:

# runs perfectly 
phpunit -c app/phpunit.xml --debug src/My/Bundle/Tests/Entity 
# fails when reaching the tests that ran perfectly in previous command 
phpunit -c app/phpunit.xml --debug 

這種新的ErrorHandler似乎沒有證件,我無法找到太多關於它的谷歌除對於拉入請求和this small article

我已經試過:

  • 設置SYMFONY_DEBUG=0環境變量,但這似乎沒有做任何DIF ference。
  • 添加debug.error_handler.throw_at: 0參數來我test_config.yml

編輯:

論@cerad要求我試圖孤立測試,試圖用盡可能少地再現碼,香港專業教育學院管理與4個測試重現:

class MyControllerTest extends WebTestCase 
{ 
    public function testRoutesLoaded_1() 
    { 
     $client = self::createClient(); 

     /** @var Router $router */ 
     $router = $client->getKernel()->getContainer()->get('router'); 
     $this->assertEquals('/menu', $router->generate('front_menu')); 
    } 

    /** 
    * @expectedException \PHPUnit_Framework_Error 
    */ 
    public function testCreateOrder_1() 
    { 
     new Order(); // required parameter missing 
    } 

    public function testRoutesLoaded_2() 
    { 
     $client = $this->createNewFrontClient(); 

     /** @var Router $router */ 
     $router = $client->getKernel()->getContainer()->get('router'); 
     $this->assertEquals('/menu', $router->generate('front_menu')); 
    } 

    /** 
    * @expectedException \PHPUnit_Framework_Error 
    */ 
    public function testCreateOrder_2() 
    { 
     new Order(); // required parameter missing 
    } 
} 

正如你所看到的,我只是運行相同的精確檢驗2次,但還是最後一個導致錯誤:

MyControllerTest::testCreateOrder_2 Failed asserting that exception of type "Symfony\Component\Debug\Exception\ContextErrorException" matches expected exception "\PHPUnit_Framework_Error"

+0

是否有可能將此行爲隔離爲一個合理的小單元測試? – Cerad 2014-10-26 15:10:58

+0

是的,我有一個測試加載symfony,並檢查路由是否存在,以及第二個測試是否引發錯誤。如果第一個執行第一個,則第二個測試失敗,覆蓋PHPUnit錯誤處理程序 – NDM 2014-10-26 15:17:35

+0

Ok。我不明白第二個測試失敗的部分,如果第一個測試是先執行的。無論如何,你可以發佈一些代碼嗎?我不能聲稱有廣泛的測試,但我確實有這些測試,在2.3到2.5的升級中倖免於難。只是爲了澄清,我們正在談論2.5.6?還是你使用2.6.0-dev? – Cerad 2014-10-26 15:24:46

回答

5

由於我沒有得到任何答覆,我發佈了issue on Symfony's github,他們證實這是不正確的行爲。

問題已解決,並且是merged in 2.6-dev

+2

我有一個通知,如果你遇到了這個問題並且更新了Symfony,你將不得不手動清除緩存('''rm -rf app/cache/*''')以使應用程序工作。這是因爲不正確的行爲被緩存,並且'''cache:clear'''首先讀取緩存。 – ScayTrase 2014-11-18 06:45:15