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.phpphpunit을은 단순히 그것을 무시했습니다.

여분의 .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.