phpunit으로 단일 테스트 방법을 실행하는 방법은 무엇입니까?


335

나는이라는 단일 시험 방법을 실행하기 위해 고군분투 testSaveAndDrop파일에 escalation/EscalationGroupTest.php와를 phpunit. 나는 다음 조합을 시도했다 :

phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=escalation/EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=testSaveAndDrop

각각의 경우 파일의 모든 테스트 방법 escalation/EscalationGroupTest.php이 실행됩니다. 하나의 방법을 대신 선택하는 방법?

클래스의 이름입니다 EscalationGroupTest과의 버전은 phpunit3.2.8이다.


시험 수업의 수업 명은 무엇입니까?
sectus

답변:


459

다음 명령은 단일 방법으로 테스트를 실행합니다.

phpunit --filter testSaveAndDrop EscalationGroupTest escalation/EscalationGroupTest.php

phpunit --filter methodName ClassName path/to/file.php

최신 버전의 phpunit의 경우 다음과 같습니다.

phpunit --filter methodName path/to/file.php

1
EscalationGroupTest 작성이 필요 했습니까? 그것의 사용은 무엇입니까?
mujaffars

2
Ok 나는 그것이 클래스 이름이다
mujaffars

15
이름이 testSaveAndDrop * 인 테스트 메소드 (예 : testSaveAndDropSomething)도 실행합니다. 정확히 testSaveAndDrop을 실행하려면 --filter '/ :: testSaveAndDrop $ /'를 사용하십시오
Farid Movsumov

1
@ mujaffars 나는 의심합니다. "나는 그것을 얻었습니다"는 공백으로 인해 PHP에서 유효한 식별자가 아닙니다.
Jon McClung

2
이것은 지금 작동하지 않습니다. 그것은 단지 phpunit --filter methodName path/to/testing/file아니, ClassName .
CJ Dennis

213

주석에 테스트를 표시하는 것을 선호합니다.

/**
 * @group failing
 * Tests the api edit form
 */
public function testEditAction()

그런 다음

phpunit --group failing

명령 행에 전체 경로를 지정할 필요는 없지만, 코드를 어지럽히 지 않기 위해 커밋하기 전에 제거해야합니다.

단일 테스트에 여러 그룹을 지정할 수도 있습니다

/**
  * @group failing
  * @group bug2204 
  */
public function testSomethingElse()
{
}

4
이 방법이 마음에 들어 주석을 통해 여러 그룹을 할당 할 수 있습니까? @group failing, Integration
어지러운 브라이언 하이

4
물론입니다. 그러나 쉼표로 구분되지 않았습니다. 이를 설명하기 위해 답변을 편집했습니다.
iamtankist

이 방법이 더 좋습니다 ... phpunit.xml의 <groups> 요소를 참조하여 테스트를 필터링 할 수도 있습니다 ... <phpunit><groups> <include> <group> failing </ group > </ include> </ groups>
Nicolas Galler

2
그러나 문제는 SINGLE 테스트를 실행하는 것이 었습니다. 또한 실패라는 그룹은 사용할 수있는 최악입니다. 일부 테스트가 실패하면 phpunit --group을 실행하여 실패한 테스트를 그룹에 제공하지 않고 실행할 수 없습니다. 혼란 스럽습니다.
Rafał Mnich

가장 좋은 답변! @depends다른 테스트의 경우 단일 테스트가 없으므로 상호 연결된 모든 테스트를 정확히 찾아서 @group주석 을 사용해야합니다 .
센츄리

117

더 일반적인 대답은 다음과 같습니다.

메소드 이름이 고유하다고 확신하는 경우 메소드 이름으로 만 필터링 할 수 있습니다 (이것이 저에게 효과적입니다)

phpunit --filter {TestMethodName}

그러나 파일 경로 / 참조를 지정하는 것이 더 안전합니다.

phpunit --filter {TestMethodName} {FilePath}

예:

phpunit --filter testSaveAndDrop reference/to/escalation/EscalationGroupTest.php

빠른 참고 사항 : 이름이 지정된 함수가 testSave있고 testSaveAndDropcommand phpunit --filter testSave를 사용하여 이름이 지정된 다른 함수 가 실행 testSaveAndDrop되고로 시작하는 다른 함수가 testSave*있으면 이상합니다!


4
전혀 이상하지는 않지만 기본적으로 하위 문자열 일치입니다. 그 행동을 원한다면 문자열 토큰 끝을 사용하십시오./testSave$/
Christian

파일 경로 만 지정하여 해당 파일의 모든 테스트를 실행하려면 어떻게해야합니까?
still_dreaming_1

48

다음 명령은 정확히 testSaveAndDrop 테스트 를 실행 합니다 .

phpunit --filter '/::testSaveAndDrop$/' escalation/EscalationGroupTest.php

4
나를 위해 일하지 않았다. 마침내 \b대신에 사용 $하여 트릭을 수행했습니다 --filter '/::testSaveAndDrop\b/'.
Joe

1
메소드 이름 엔딩 모두 '/::testSaveAndDrop\b/''/::testSaveAndDrop$/'같이 나를 위해 일한 phpunit --filter ClassName::methodName$phpunit --filter ClassName::methodName\b(리눅스)
발렌타인 데이시

22

여러 가지 방법으로 laravel에서 phpunit 테스트 실행 ..

vendor/bin/phpunit --filter methodName className pathTofile.php

vendor/bin/phpunit --filter 'namespace\\directoryName\\className::methodName'

단일 클래스 시험 :

vendor/bin/phpunit --filter  tests/Feature/UserTest.php
vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest'
vendor/bin/phpunit --filter 'UserTest' 

단일 방법 테스트 :

 vendor/bin/phpunit --filter testExample 
 vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest::testExample'
 vendor/bin/phpunit --filter testExample UserTest tests/Feature/UserTest.php

네임 스페이스 내의 모든 클래스에서 테스트를 실행하십시오.

vendor/bin/phpunit --filter 'Tests\\Feature'

더 많은 방법을 실행 테스트를 더보기


21

이런 식으로

phpunit --filter 'EscalationGroupTest::testSaveAndDrop' EscalationGroupTest escalation/EscalationGroupTest.php 

없이 =와와'

https://phpunit.de/manual/3.7/en/textui.html


이 작동하지 않습니다. 수업의 모든 테스트 EscalationGroupTest가 처리되고 있습니다.
Alex

여전히 9 개의 테스트가 모두 실행되고 있습니다. phpunit 버전 3.2.8
Alex

2
--filter파일 이름 앞의로 이동하면 제대로 작동합니다.
Schleis

PHPUnit 4.8.10에서 나를 위해 일했습니다
Asaph

이것은 No tests executed!PHPUnit 4.8.35 @Schleis 에 대해 알려줍니다 . 명령을 정확히 어떻게 변경 했습니까?
Andru

14
  • 이것을 laravel 루트 디렉토리에서 사용중인 프로젝트 루트 디렉토리에서 실행하십시오.

vendor/bin/phpunit --filter 'Your method name'

사용자 정의 메소드 이름이있는 예.

 /** @test //Initilize this for custom method name, without test keyword
  *  
  * Test case For Dashboard When User Not logged In it will redirect To login page
  */
  public function only_logged_in_user_see_dashboard()
  {
    $response = $this->get('/dashboard')
                   ->assertRedirect('/login');
  }

테스트 키워드가있는 예

/**
* A basic test example.
*
* @return void
*/
 public function testBasicTest()
 {
  $this->assertTrue(true);
 }

1
물론 초보자입니다. 곧 응답에 대한보다 구체적인 코드를 시도 할 것입니다
Connectify_user

7

netbeans에 있다면 테스트 방법을 마우스 오른쪽 버튼으로 클릭하고 "집중 테스트 방법 실행"을 클릭하십시오.

집중 시험 방법 메뉴 실행


7

당신은 이것을 시도 할 수 있습니다 단일 테스트 사례를 실행할 수 있습니다

phpunit tests/{testfilename}

예 :

phpunit tests/StackoverflowTest.php

Laravel 5.5에서 단일 테스트 사례를 실행하려면

vendor/bin/phpunit tests/Feature/{testfilename} 

vendor/bin/phpunit tests/Unit/{testfilename} 

예 :

vendor/bin/phpunit tests/Feature/ContactpageTest.php 

vendor/bin/phpunit tests/Unit/ContactpageTest.php

문제는 하나의 시험 방법 (안 클래스)를 실행하는 방법이었다
알렉세이 Akireikin

4

테스트가 모두 실행되는 이유는 --filter 는 파일 이름 뒤에 플래그 입니다. PHPUnit은 옵션을 전혀 읽지 않으므로 모든 테스트 사례를 실행하고 있습니다.

도움말 화면에서 :

 Usage: phpunit [options] UnitTest [UnitTest.php]
        phpunit [options] <directory>

따라서 --filter@Alex 및 @Ferid Mövsümov 답변에서 언급 한대로 원하는 테스트 파일 앞에 인수를 이동하십시오 . 또한 원하는 테스트 만 실행해야합니다.


나는이 주소를 원래의 질문을 생각하지 않는다 ... 나는 많은 단위 테스트를 포함하는 파일에 테스트의 한을 실행하는 데 필요한 같은 문제가 있고, 필터를 사용하여 두 개의 다른 답변은 나를 위해 일한
jfoo을

@jfoo OP 명령의 문제 중 하나는 --filter옵션이 파일 이름 뒤에 있다는 것 입니다. 다른 두 답변은 정답을 보였지만 왜 필터가 적용되는지 지적하지 않았습니다.
Schleis


1

나는 파티에 늦었다. 그러나 개인적으로 나는 전체 줄을 쓰는 것을 싫어합니다.

대신 .bash_profile 파일 에서 다음 바로 가기를 사용하면 새 별칭을 추가 한 후 .bash_profile 파일 을 소스로 지정 해야 작동하지 않습니다.

alias pa="php artisan"
alias pu="vendor/bin/phpunit" 
alias puf="vendor/bin/phpunit --filter"

용법:

puf function_name

puf filename

당신이 사용하는 경우 비주얼 스튜디오 코드를 당신은 당신의 테스트 산들 바람 만들기 위해 다음과 같은 패키지를 사용할 수 있습니다.

Package Name: Better PHPUnit
Link: https://marketplace.visualstudio.com/items?itemName=calebporzio.better-phpunit

그런 다음 설정에서 키 바인딩을 설정할 수 있습니다. MAC에서 Command + T 바인딩을 사용 합니다.

이제 커서를 임의의 함수에 놓고 키 바인딩을 사용하면 해당 단일 테스트가 자동으로 실행됩니다.

전체 클래스 를 실행해야하는 경우 클래스 위에 커서를 놓고 키 바인딩을 사용하십시오.

다른 것들이 있다면 항상 터미널 과 tweek

행복한 코딩!


0

단일 테스트 방법을 실행하려면 --filter를 사용해야합니다 php phpunit --filter "/::testMethod( .*)?$/" ClassTest ClassTest.php

위의 필터는 testMethod 만 실행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.