2016-06-06 3 views
3

Symfony 명령을 작성하여 응용 프로그램을 초기 상태로 재설정했습니다. CLI에서이 명령을 실행하려면 내가 입력해야합니다모든 테스트 전에 명령 실행

php bin/console app:reset 

나는 모든 단위 테스트를하기 전에 한 번 그 명령 을 실행하고 싶습니다. 나는 각 시험 전에과 그 전에 을 할 수 있었고 반드시 모든 클래스보다 먼저 할 수 있었다. 위에서 언급 한 바와 같이 그 명령은 시간이 좀 걸릴 이후, 즉 각 시험 전에 좋은 작동하고 setUpBeforeClass()과 내가 각 클래스 전에를 가질 수 있지만, 한 번에 모든 테스트가 충분하다 전에,

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

    $app->run(new ArrayInput([ 
     'command' => 'app:reset', ['-q'] 
    ]), new NullOutput()); 
} 

: 그러므로 나는 그 코드를 사용 달리기.

답변

2

는 심포니 문서이 수행하는 방법에 대해 설명합니다 한마디로 How to Customize the Bootstrap Process before Running Tests

을, 당신은 호출 할 phpunit.xml.dist을 수정하셔야합니다 기본 부트 스트랩 대신 자체 부트 스트랩을 사용합니다 (기본 부트 스트랩에 위임).

+0

그렇게하는 것이 가장 쉬운 방법이었습니다. – philipp

2

a test listener을 구현하고 정적 속성을 사용하여 명령이 한 번만 실행되도록 할 수 있습니다. phpunit을 5.4

예 :

<?php 

use PHPUnit\Framework\TestCase; 

class AppResetTestListener extends PHPUnit_Framework_BaseTestListener 
{ 
    static $wasCalled = false; 

    public function startTestSuite(PHPUnit_Framework_TestSuite $suite) 
    { 
     if (!self::$wasCalled) { 
      // @todo call your command 

      self::$wasCalled = true; 
     } 
    } 
} 

당신은 당신의 phpunit.xml 설정에 enable the test listener해야합니다.

더 읽기 :

+0

좋은 아이디어를 확인해보세요! – philipp

+0

몇 가지 실험을 한 후에도 일반 멤버 변수를 사용할 수 있다는 것을 알았습니다. 이렇게하면 여러 "run-once"자식 리스너가 상속 할 수있는 기본 클래스를 만들 수 있습니다. 비슷하게, 각 리스너는'endTestSuite' 기능을 제공하기 위해 자체를 셧다운 함수 (기본 클래스에서 수행)로 등록 할 수 있습니다. – TaZ

관련 문제