PHPUnit-구성 파일 사용시 '실행 된 테스트 없음'


89

문제

코드 품질을 향상시키기 위해 저는 평범한 테스트 솔루션 대신 단위 테스트를 사용하여 코드를 테스트하는 방법을 배우기로 결정했습니다.

공통 데이터베이스 기능을 수행 할 수있는 개인 라이브러리 용 composer를 사용하여 PHPUnit을 설치하기로 결정했습니다. 처음에는 PHPUnit에 대한 구성 파일이 없었고 다음과 같은 명령을 실행했습니다.

$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest

이것은 터미널 명령이므로 .php확장을 포함하지 않았습니다 . 위에서 언급 한 GeneralStringFunctionsTest는 실제로 GeneralStringFunctionsTest.php파일입니다.

출력은 내가 예상 한 것입니다.

시간 : 31ms, 메모리 : 2.75Mb

확인 (테스트 1 개, 어설 션 1 개)

그런 다음 매번 파일을 수동으로 입력하는 대신 구성 파일을 사용하여 테스트 스위트를 자동으로로드하려고했습니다. phpunit.xml루트 디렉터리에 라는 파일을 만들고 파일에 http://pastebin.com/0j0L4WBD 를 입력했습니다 .

<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
    <testsuites>
        <testsuite name="Tests">
            <directory>tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

이제 명령을 실행할 때 :

phpunit

다음 출력이 표시됩니다.

Sebastian Bergmann 및 기여자에 의해 PHPUnit 4.5.0.

/Users/muyiwa/Projects/DatabaseHelper/phpunit.xml에서 읽은 구성

시간 : 16ms, 메모리 : 1.50Mb

실행 된 테스트가 없습니다!

도움이되는 경우 내 디렉토리 구조는 다음과 같습니다.
src-최상위 디렉토리 (내 모든 소스 코드 포함)
테스트-최상위 디렉토리 (내 모든 테스트 포함, 내 src 폴더 와 동일하게 구성됨 )
공급 업체-Composer 타사 파일

또한 composer json 및 lock 파일과 최상위 수준의 phpunit xml 파일이 있습니다.

내가 시도한 것들

  • 디렉토리를 다음 phpunit.xml으로 변경tests/GeneralStringFunctions
  • 디렉토리를 다음 phpunit.xml으로 변경./tests
  • 이동 phpunit.xml받는 파일을 tests디렉토리 다음 디렉토리로 변경하는 ./대신 tests.
  • phpunit.xml"Tests"를 명시 적 접미사로 지정 하기 위해의 디렉토리 태그에 접미사 속성을 추가합니다 .

가 tests/GeneralStringFunctions/GeneralStringFunctionsTest폴더 나 파일 이름은?
— hek2mgl

@ hek2mgl 파일 이름이고 실제로는 GeneralStringFunctionsTest.php. 명령 줄 인터페이스에서 .php확장 기능이 없어도 작동하기 때문에 입력하지 않았습니다 .
— Muyiwa Olu 2015

1
좋습니다. 그러면 구성이 작동합니다. Btw, 접미사를 지정하면 귀하의 경우 Test.php보다는 있어야 Test하지만 Test.php기본값 이므로 생략해도 됩니다.
— hek2mgl

@ hek2mgl 알림 주셔서 감사합니다! 내 테스트가 구성 파일로 실행되지 않는 이유를 알고 phpunit.xml있습니까?
— Muyiwa Olu 2015

구성 파일을 보여주지 않는 이유는 무엇입니까?
— ThW

답변:


190

그만한 가치 (늦은 것)를 위해, 저는 최근에 간단한 웹 사이트를위한 새로운 Laravel 5.1 프로젝트를 만드는 동안 이것을 만났습니다. 디버깅을 시도했지만 시도했을 때 혼란 스러웠습니다.

php artisan make:test homeTest

(참이라고 주장하는 기본 테스트가 참입니다)

그리고 출력을 보았다

No tests executed!

결국 문제는 내 PHP 설치와 관련이 있습니다. "phpunit"은 전역 적으로 등록되고 다르게 구성되었지만 Laravel 설치와 함께 제공된 phpunit은 올바르게 구성되고 완벽하게 실행되었습니다.

따라서 수정은 공급 업체의 구성된 phpunit (app / 및 tests /와 동일한 루트 디렉토리에서)을 실행합니다.

./vendor/bin/phpunit

다른 사람에게 도움이되기를 바랍니다!


4
나는 이것이 정답 일 가능성이 가장 높다고 생각합니다. 그 이후로 프로젝트를 제거 했으므로 다시 확인할 방법이 없지만 composer가있는 향후 프로젝트에서는 항상 vendor/bin/phpunit전역 phpunit바이너리 대신 사용 했습니다 . phpunit실수로 다시 같은 실수를하지 않도록 글로벌 바이너리 를 제거하기까지했습니다 . 그 이후로는 나타나지 않았습니다. 아마도 그 이유 일 가능성이 높기 때문에이를 수락 된 답변으로 표시하겠습니다.
— Muyiwa Olu

3
전화가 ./vendor/bin/phpunit신선한 laravel 5.4에 나를 위해 속임수를 썼는지는 설치
— IRA

마찬가지로 이것은 Wordpress 프로젝트에서 작업하는 동안 도움이되었습니다. 같은 문제 : "phpunit"은 전역 적으로 등록되고 다르게 구성 될 수 있습니다. 공유 해주셔서 감사합니다!
— sqsinger

이것은 나를 위해 고쳤지만 phpunit을 전역 적으로 고치는 방법이 있습니까? 그냥 타이핑 만하면 좋을 텐데phpunit
— Noitidart 17

2
당신은을 만들 수 있습니다 @Noitidart alias위해 ./vendor/bin/phpunit
— 가네 K

98

XML 파일은 그대로입니다. 그러나 tests/폴더 에있는 PHP 파일의 이름이 다음과 같이 지정 되었는지 확인해야 합니다.

tests / Test.php <--- 대문자 "T"
tests / user Test.php
tests / fooBar Test.php
등을 참고 하십시오 .

파일 이름은 "Test.php"로 끝나야 합니다. 이것이 PHPUnit이 디렉토리 내에서 찾고있는 것입니다.

또한 모든 테스트 방법에는 "test"로 시작하는 이름이 있어야합니다.

public function testFooBar()
{
    // Your test code
}

도움이 되었기를 바랍니다.


4
또는 --test-suffix=anything.php재정의에 사용할 수 있습니다
— 체크섬

나를 위해 테스트 폴더의 상대 경로를 절대 경로로 바꾸는 것이 유용했습니다.
— Timur Samkharadze

구성 파일에서 이것을 어떻게 재정의합니까?
— Jonathan

19

Windows에서는 터미널에서 다음 명령을 사용하십시오.

.\vendor\bin\phpunit

그것은 명령이

phpunit

"실행 된 테스트가 없습니다!"를 반환합니다.

Mac에서

./vendor/bin/phpunit

도움이 되었기를 바랍니다.


답변 해 주셔서 감사합니다. 정말 도움이됩니다.
— Goke Obasa 2018

phpunit전역 경로에 없는지 확인하십시오 (다음과 같이 실행 중인지 확인 phpunit --version하고 예상 한 것과 일치하는지 확인할 수 있습니다 . Xampp은 일반적으로 동일한 php bin 디렉토리에 phpunit을 설치합니다. 그게 문제였습니다.
— giovannipds

12

가상 머신의 PHPUnit이 버전 6으로 업데이트 된 후에도 동일한 문제가 발생했습니다. --debug 및 --verbose조차도 "실행 된 테스트가 없습니다"라는 말은 유용하지 않습니다. 결국 새 버전에서 클래스와 네임 스페이스가 변경되었으며 이전 클래스에 대한 참조가 포함 된 파일을 실행하고 싶지 않았습니다. 나를위한 수정 사항은 모든 테스트 케이스에서 다음을 교체하는 것입니다.

class MyTestCase extends \PHPUnit_Framework_TestCase {...}

와:

use PHPUnit\Framework\TestCase;

class MyTestCase extends TestCase {...}

아, 네, 이것이 원래 질문에 대한 답인 것 같지는 않지만 6.x로 업그레이드 한 후 내 문제를 해결했습니다!
— Tama

이것은 PHPUnit 5.7에서 8.5로 업그레이드 할 때도 문제였습니다. 팁에 감사드립니다!
— 확인자

7

나는 이것이 매우 오래되었다는 것을 알고 있지만 나에게도 일어났습니다. 바라건대 이것은 누군가를 도울 것입니다.

내 문제는 / ** @test * /에서 '@'기호를 잊었다는 것입니다.

잘못된:

/** test */
function a_thread_can_be_deleted()
{
    ...
}

권리:

/** @test */
function a_thread_can_be_deleted()
{
    ...
}

1
2 년이 지난 후, 이것이 저를위한 것이 었습니다. 주석의 형식과 정확히 일치해야합니다. 나는 거기에 빠진 공간이 있었다. 감지하지 못했습니다. 약간 짜증나는 것은 laravel 6.1에서 나는 artisan make 명령을 사용했고 그 주석을 포함하지 않았습니다
— aibarra

1
이 답변은 유용합니다
— Sundar

패키지를 개발할 때 문제가 발생했습니다. 'php artisan make : test SomeTest'를 실행하고 패키지 테스트 디렉토리로 옮겼을 때, 기본 testExample 메소드의 주석은 기본 설명 만 포함하고 @return void'@test'는 포함하지 않아 phpunit이 식별 할 수없는 이유입니다. 테스트로.
— DAMIEN JIANG

5

파일 이름이 명명 규칙을 따르지 않는다는 단순한 사실을 발견 하기 위해 --debug (그런데 좋은 방법) 를 사용하기로 결정하기 전에 10 분 동안 머리를 뽑았 습니다. 끝에 추가 "s"가 있습니다. .

잘못된

CreateAdminTests

권리

CreateAdminTest

이 메모가 누군가에게 도움이되기를 바랍니다.





2

PHPSTORM 을 사용하는 경우 설정으로 이동 한 다음

  • Test Frameworks

    +를 클릭하고

  • PHPUnit Local 그때

  • Use Composer Auto Loader 그런 다음 스크립트 필드 경로에 붙여 넣으십시오.

  • C:\{YOUR PROJECT NAME}\vendor\autoload.php

  • 확인을 클릭하십시오

  • HAPPY TESTING


2

phpunit.xml 파일을 확인하고 testsuites를 살펴보십시오.

내 버전의 phpunit (2019)은 (접미사) * Test.php로 끝나는 파일을 찾고 있습니다. 따라서 모든 테스트 파일의 이름이 올바른지 확인하십시오 (예 : BookTest.php가 정확하고 BookTests.php가 올바르지 않음, BookTestCase.php가 올바르지 않음).


2

파티에 늦었지만이 정보는 다른 사람들에게 도움이 될 수 있습니다.

위의 솔루션은 저에게 효과적이지 않았습니다. 라 라벨 7.x부터 기본적으로 PHPUnit은 "Test.php"가 붙은 PHP 파일 만 실행합니다. 예를 들어 테스트를 생성하는 경우 이름 지정 CreateUser은 작동하지 않지만 이름 지정 CreateUserTest은 작동합니다.

한계를 극복하려면 요소 로 이동하여 속성을 phpunit.xml수정하십시오 .suffixdirectory

...
<testsuite name="Unit">

    <!-- modify suffix -->
    <directory suffix=".php">./tests/Unit</directory>

</testsuite>
<testsuite name="Feature">

    <!-- modify suffix -->
    <directory suffix=".php">./tests/Feature</directory>

</testsuite>
...

이것은 PHPUnit이 .php디렉토리에서 확장자를 가진 모든 파일을 실행하도록 지시합니다 . 업데이트 후 앱의 캐시를 지우려면 참고 phpunit.xml:

php artisan config:cache

PHPUnit XML 구성에 대한 추가 정보는 https://phpunit.de/manual/6.5/en/appendixes.configuration.html 에서 찾을 수 있습니다.


1

phpunit.xml 파일에 테스트 스위트를 추가 했습니까?

<phpunit>
    <testsuite name="app1" >
        <directory>./</directory>
    </testsuite>
</phpunit>

거기에 여러 디렉토리를 추가 할 수 있습니다.


안녕하세요, 질문에서 명확하지 않은 경우 죄송하지만 XML 파일에 테스트 스위트와 해당 이름을 추가했습니다. 사본은 여기에서 찾을 수 있습니다. pastebin.com/0j0L4WBD .
— Muyiwa Olu 2015

<directory> ./ tests </ directory> 시도
— Aine

업데이트 해 주셔서 감사합니다. 안타깝게도 ./tests 에 내 디렉토리 와 동일한 문제가 발생 합니다. Time: 28 ms, Memory: 1.50Mb No tests executed!
— Muyiwa Olu 2015

불행히도 같은 문제 :( Configuration read from /Users/muyiwa/Projects/Web Development/DatabaseHelper/phpunit.xml Time: 66 ms, Memory: 1.50Mb No tests executed!. 수동으로 참조 할 때 확실히 작동합니다. 어떤 이유로 구성 파일에서로드하는 것을 좋아하지 않습니다. (
— Muyiwa Olu

마지막 추측. phpunit.xml 파일을 tests / 디렉토리로 이동해보십시오. 파일에서 디렉토리를 <directory> ./ </ directory>로 변경하십시오.
— Aine 2015 년

0

나를 위해 phpunit --debug를 사용하여 실행되지 않는 테스트를 보여주었습니다.

$this->visit('/')
         ->see('Laravel');

그리고 디렉토리가 .htaccess 인증으로 보호 되었기 때문에 페이지를 방문 할 수 없었습니다.

나를위한 해결책은이 테스트를 수행하는 것이 었습니다 (또는 대부분 .htaccess 인증을 수행함).


0

이것은 매우 늦었지만 누군가에게 도움이되기를 바랍니다.

절대 참조를 사용하여 테스트를 실행했습니다. 폴더 구조 [project / tests / test.php]

내 디렉토리 줄은 다음과 같습니다 ./tests/test.php


0

약간의 측면이있을 수 있지만 (나와 같은) Vagrant에서 Laravel을 사용하고 있다면 "windows side"가 아닌 vagrant box 내부에서 phpunit을 실행하고 있는지 확인하십시오. :)


0

나는 일이 잘 설정되었을 때에도 실행되는 테스트가 없다는 문제가 있었다.

원인은 네임 스페이스가 파일의 첫 번째 명령이 아니었고 일부 문서 블록 주석 이후였습니다.

되 돌리면 phpunit이 테스트를보고 올바르게 실행됩니다.


0

내 것이 좀 웃겼어.

내가 사용하는 경우 php artisan make:test실수로 넣어 .PHP 처럼 ProductRewardPointController.php만든 ProductRewardPointController.php.php및 phpunit을은 단순히 그것을 무시했습니다.

여분의 .php를 삭제하고 정상으로 돌아갑니다.


0

실행 된 테스트 없음 이라는 동일한 문제가 발생했습니다 ! , 동일한 파일 이름 과 클래스 이름 을 유지하여 해결됩니다 .


0

당신이 좋아 십오를 사용하는 경우 JetBrains의 PHPStorm , 또한 통지하시기 다음에 Run/Debug Configurations창에서 Test scope필요로 설정합니다 directory및 포인트 당신의 위치로 디렉토리 tests폴더가 위치한.

디렉토리를 설정하는 것을 잊었 음을 알아내는 데 30 분이 걸렸습니다. phpunit.phar테스트 범위와 디렉토리를 올바르게 설정 하는 한 전역 을 사용할 수 있으며 IDE는 다른 작업을 대신 처리합니다.


0

테스트 파일의 함수 이름은 접두사로 시작 test하거나 함수 앞에 주석을 추가해야합니다.

/** @test */

그것이 아닌지 확인하십시오

/* @test */

작동하지 않기 때문입니다. 슬래시 뒤에는 별표 2 개가 있어야합니다.


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