PHPUnit - 구성 파일 사용 시 '테스트가 실행되지 않음'
문제
코드의 품질을 향상시키기 위해, 저는 보통 수준의 테스트 솔루션 대신 유닛 테스트를 사용하여 코드를 테스트하는 방법을 배우기로 결정했습니다.
공통 데이터베이스 기능을 실현할 수 있는 퍼스널 라이브러리용 컴포저를 사용하여 PHPUnit를 설치하기로 했습니다.처음에는 PHPUnit용 구성 파일이 없었고 다음과 같은 명령을 실행했습니다.
$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest
「 」는 하지 않았습니다..php
String Functions General String Functions (일반 함수)는 'Test'입니다.GeneralStringFunctionsTest.php
filename을 클릭합니다.
예상한 대로의 출력입니다.
시간: 31 ms, 메모리: 2.75 Mb
OK (테스트 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
다음과 같은 출력이 표시됩니다.
PHPUnit 4.5.0 (Sebastian Bergmann 및 기여자)
/Users/muywa/Projects/Database에서 읽은 구성도우미/phpunit.xml
시간: 16 ms, 메모리: 1.50 Mb
실행된 테스트가 없습니다!
도움이 되는 경우, 제 디렉토리 구조는 다음과 같습니다.
- )src - sr sr모 ( my code code code 。
tests - 최상위 디렉토리(모든 테스트에서 src 폴더와 동일한 구조로 구성됨)
- " - " " "
또한 composer json과 lock 파일, 최상위 레벨의 phpunit xml 파일도 파일로 가지고 있습니다.
시도해 본 것
- 의 변경
phpunit.xml
로로 합니다.tests/GeneralStringFunctions
- 의 변경
phpunit.xml
로로 합니다../tests
- [ ] 의
phpunit.xml
tests
가 「」로 ../
tests
. - 의 추가
phpunit.xml
을 사용하다
(늦은 것은) 얼마 전, 심플한 Web 사이트의 새로운 Larabel 5.1 프로젝트를 작성하던 중 우연히 알게 되었습니다.디버깅을 시도했지만 막상 해보니 혼란스러웠습니다.
php artisan make:test homeTest
(True만 true라고 주장하는 기본 테스트가 있음)
그리고 출력을 보았다.
No tests executed!
결국 문제가 된 것은 PHP 설치와 관련된 것입니다.Phpunit은 글로벌하게 등록 및 설정이 다른 반면, Larabel 설치와 함께 제공된 phpunit은 적절하게 구성되어 완벽하게 실행되었습니다.
따라서 이 수정은 벤더가 구성한 phpunit을 실행하고 있습니다(app/ 및 tests/와 동일한 루트 디렉토리에서):
./vendor/bin/phpunit
그게 다른 사람에게 도움이 됐으면 좋겠어!
XML 을 사용합니다. PHP의 확인해야 합니다.tests/
폴더 이름은 다음과 같습니다.
tests/Test.php <--- 대문자 'T'에 주의해 주세요.
tests/userTest.php
테스트/fooBarTest.php
syslog.
파일명은 "Test.php"로 끝나야 합니다.이것은 PHPUnit가 디렉토리내에서 찾고 있는 것입니다.
모든 에는 " "test"로 시작하는 이름이 .@test
★★★★
public function testFooBar()
{
// Your test code
}
또는 다음과 같이 입력합니다.
/**
* @test
*/
public function fooBarTest() {
// test code here
}
도움이 됐으면 좋겠네요!
Windows 에서는 단말기에서 다음 명령을 사용합니다.
.\vendor\bin\phpunit
만약 명령어가
phpunit
"No tests executed!"가 반환됩니다.
Mac 사용 중
./vendor/bin/phpunit
도움이 됐으면 좋겠다.
가상 머신의 PHPUnit이 버전 6으로 업데이트 된 후에도 동일한 문제가 발생했습니다.심지어 --debug와 --verbose도 아무런 도움이 되지 않고 "No tests executed"라고만 말했습니다.결국 새 버전에서 클래스와 네임스페이스가 변경되었으며 이전 클래스에 대한 참조가 포함된 파일을 실행하기를 원하지 않았습니다.모든 테스트 케이스에서 다음과 같은 문제를 해결했습니다.
class MyTestCase extends \PHPUnit_Framework_TestCase {...}
포함:
use PHPUnit\Framework\TestCase;
class MyTestCase extends TestCase {...}
정말 오래된 일이라는 건 알지만, 나도 그런 일이 있었어.이게 누군가에게 도움이 되길 바라.
문제는 /** @test */의 '@' 기호를 잊어버린 것입니다.
틀렸다:
/** test */
function a_thread_can_be_deleted()
{
...
}
오른쪽:
/** @test */
function a_thread_can_be_deleted()
{
...
}
파일명이 명명규칙을 따르지 않는다는 단순한 사실을 발견하기 위해 --debug(그런데 좋은 방법)를 사용하기로 결정하기 전에 10분 동안 머리를 쥐어뜯었습니다.마지막에 s가 추가되어 있었습니다.
틀렸어
CreateAdminTests
맞다
CreateAdminTest
이 쪽지가 도움이 되기를 바란다
파티에 늦게 왔지만, 이 정보는 다른 사람들에게 도움이 될 수 있어.
위의 해결방법은 나에게 효과가 없었다.Laravel 7.x의 PHPnit "Test.php"의 PHP입니다., "" " " " " " " 입니다.CreateUser
을 붙이면가 없지만 이름을 붙이면 효과가 없습니다.CreateUserTest
과가있있 있있있다다
하려면 , 「 」에 해 .phpunit.xml
을 변경합니다. " 를 변경합니다.suffix
from attribute 。directory
★★★★
...
<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 를 참조하십시오.
벤더 파일에서 전화를 걸기만 하면 된다
vendor\bin\phpunit
/ 의 \ \ 음 notice /
phpunit을 실행하는 대신
사용하다
벤더\bin\sublic 유닛
PHPSTORM을 사용하는 경우 Settings로 이동한 후 goto로 이동합니다.
Test Frameworks
+를 클릭하여 선택합니다.
PHPUnit Local
그때Use Composer Auto Loader
해서 대본 .C:\{YOUR PROJECT NAME}\vendor\autoload.php
[확인] 을 클릭합니다.
HAPPY TESTING
phpunit.xml 파일을 확인하고 테스트 슈트 내부를 확인합니다.
내 버전의 phpunit(2019)은 (suffix) *Test.php로 끝나는 파일을 찾고 있습니다.따라서 모든 테스트 파일의 이름이 올바르게 지정되어 있는지 확인하십시오(예:BookTest.php는 맞지만 BookTests.php는 맞지 않습니다.BookTestCase.php는 그렇지 않습니다).
이름 에는 반드시 '어느 인가'가 붙어야 .test
기능 .
/** @test */
그렇지 않은지 확인합니다.
/* @test */
안 먹히니까슬래시 뒤에 아스타리스크가 두 개 있어야 합니다.
같은 문제가 발생하여 모든 설정과 구문이 정상임을 알게 되었습니다.이유는 모르겠지만 앱 폴더에 모든 테스트를 포함하는 이름인 "tests"(복수형)를 추가하는 것만으로도 꽤 효과가 있었습니다.
[terminal] vendor/bin/phpunit tests
만약 내 가명이 평범한 "phpunit"과 잘 어울린다면 나도 똑같이 했을 거야
[terminal] phpunit tests
필터와 동일
[terminal] vendor/bin/phpunit --filter 'Tests\\Routes\\AnyTest' Tests
끝의 "테스트"는 App 폴더 내의 동일한 폴더 이름과 같은 복수 형식임을 유의하십시오.
다른 사람에게 도움이 되고 시간을 절약해 주길 바랍니다.
안부 전합니다
테스트 클래스가 없는 경우
php artisan make:test TestName //default is future testing
php artisan make:test TestName --unit //for unit testing
테스트 파일은 서브폴더 유닛 또는 미래의 테스트폴더에서 찾을 수 있습니다.
주의: 테스트의 경우 phpuint.xml 파일을 편집할 수 있습니다.최적의 접근법은 sqlite를 사용하여 태그에 대한 설정을 하고 마지막 줄 뒤에 이 두 줄을 추가하는 것입니다.
<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>
vendor/bin/PHPUnit을 사용하여 테스트 파일을 실행할 수 있습니다. // 단일 함수를 실행하고 싶다면 테스트 파일 벤더/bin/PHPUnit을 모두 실행할 수 있습니다.
vendor/bin/PHPUnit --filter function_name or classname
마지막으로 모든 테스트에서 /** @test*/를 사용하여 PHPunit이 테스트임을 알 수 있도록 합니다.
테스트 스위트를 phpunit.xml 파일에 추가했습니까?
<phpunit>
<testsuite name="app1" >
<directory>./</directory>
</testsuite>
</phpunit>
거기에 복수의 디렉토리를 추가할 수 있습니다.
클래스 및 파일 이름에 테스트가 없습니다(예: "AuthorizationTest").
저는 phpunit --debug를 사용하여 실행하지 않는 테스트를 보여주었습니다.
$this->visit('/')
->see('Laravel');
디렉토리는 .htaccess 인증으로 보호되어 있기 때문에 페이지를 방문하기 위해 접속할 수 없었던 것 같습니다.
이 테스트(또는 대부분의 경우 .htaccess 인증을 제외)를 실시했습니다.
많이 늦었지만 누군가에게 도움이 됐으면 좋겠어요.
나는 절대 참조를 사용해서 시험을 보게 했다.폴더 구조 [프로젝트/프로젝트/테스트]php]
전화번호부 행은 이랬습니다./displays/test.php
조금 옆면일 수도 있지만, (나처럼) Vagrant에서 Larabel을 사용하고 있다면, 반드시 "Windows쪽"이 아닌 vagrant 박스 안에서 phpunit을 실행하도록 하세요.:)
모든 것이 잘 설정되어 있어도 테스트가 실행되지 않는 문제가 있었습니다.
원인은 네임스페이스가 파일의 첫 번째 명령이 아니라 일부 doc-block 코멘트 후였기 때문입니다.
되돌리면 phpunit이 테스트를 확인하고 올바르게 실행됩니다.
저는 좀 웃겼어요.
★★★★★★를 했을 때php artisan make:test
제가 실수로 .php를 넣었는데ProductRewardPointController.php
, 「 」가 작성되었습니다.ProductRewardPointController.php.php
phpunit은 그냥 무시했어요.
추가 .php를 삭제하고 정상으로 되돌립니다.
동일한 문제인 No tests executed!를 파일명과 클래스명을 동일하게 유지하여 해결하였습니다.
JetBrains PHStorm과 같은 IDE를 사용하는 경우 다음 항목도 참조하십시오.Run/Debug Configurations
,,Test scope
로 가 있다directory
는, 「 」의 「 」를 해 주세요.tests
폴더를 찾았습니다.
전화번호부 설정하는 걸 잊어버린 걸 깨닫는데 30분밖에 안 걸렸어요.글로벌 사용 가능phpunit.phar
테스트 범위와 디렉토리를 올바르게 설정하면 IDE가 다른 작업을 처리합니다.
@dataprovider를 사용하는 경우 메서드의 가시성을 확인합니다.public
그것은 나의 문제였다.
저에겐composer
양쪽에서 동작합니다../vendor/bin/phpunit
그리고.phpunit
, 나는 가지고 있지 않다.phpunit
글로벌하게 인스톨 됩니다.
@alext의 답변이 문제 해결에 도움이 되었습니다.
그래서 체크해 보면phpunit
수동(실행phpunit -h
출력:
PHPUnit 7.5.20 by Sebastian Bergmann and contributors.
Usage: phpunit [options] UnitTest [UnitTest.php]
phpunit [options] <directory>
디렉토리 또는 파일이 필요합니다.그[options]
옵션입니다.사용자는 다음 방법으로 패스할 수 있습니다.phpunit.xml
파일
시험이 있기 때문에tests
, 따라서, 다음과 같이 시도해야 합니다.phpunit tests
동작하지 않는 경우는, 다음의 샘플로 시험해 보겠습니다.phpunit
여기: https://phpunit.readthedocs.io/en/9.5/writing-tests-for-phpunit.html
이 질문에는 여러 가지 가능한 답이 있습니다.누군가 나와 같은 상황에 처했을 때 - 내가 OP와 같은 메시지를 받은 이유는 나의 데이터 제공자 기능이private
.
로 바꿨습니다.public
모든 게 잘 풀리기 시작했죠
데이터 프로바이더에 대해서는 다음과 같이 설명하겠습니다.
/**
* @dataProvider myProvider
* @return void
*/
public function testGetWhatever()
{
$this->assertTrue(true);
}
public function myProvider()
{
return ...;
}
제 경우 @group active 주석을 클래스에 추가했습니다.
/**
* @group active
**/
de cmd 콘솔을 사용하여 이 문제를 해결했습니다.테스트가 실현된 엔티리 패스를 통과합니다.
다른 방법을 찾지 못했습니다. 이 방법으로는 작동하지 않습니다.
이게 누군가에게 도움이 됐으면 좋겠어요.
언급URL : https://stackoverflow.com/questions/29299206/phpunit-no-tests-executed-when-using-configuration-file
'programing' 카테고리의 다른 글
Python에서는 argparse를 사용하여 양의 정수만 허용합니다. (0) | 2022.10.30 |
---|---|
Java에서 주문 세트를 구현한 적이 있습니까? (0) | 2022.10.30 |
v-model이 null인 경우 Vue.js에서 확인란 값을 false로 설정합니다. (0) | 2022.10.30 |
JPA 엔티티 메타모델 생성 방법 (0) | 2022.10.30 |
Spring MVC(@Response Body)에서 응답 콘텐츠 유형을 설정하는 사용자 (0) | 2022.10.30 |