PHPUnit으로 테스트를 향상하기 위한 추가 속성이 포함된 Composer 라이브러리입니다.
작곡가는 --dev eliashaeussler/phpunit-attributes를 요구합니다
라이브러리에는 즉시 사용할 수 있는 PHPUnit 확장이 함께 제공됩니다. PHPUnit 구성 파일에 등록해야 합니다.
<?xml version="1.0" 인코딩="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php" >+ <확장>+ <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension" />+ </extensions> <testsuites> <테스트 스위트 이름="단위"> <directory>테스트</directory> </testsuite> </testsuites> <출처> <포함> <디렉토리>src</디렉터리> </include> </source> </phpunit>
일부 속성은 사용자 정의 확장 매개변수를 사용하여 구성할 수 있습니다. 다음과 같이 확장 등록 섹션에 추가해야 합니다.
<extensions>- <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension" />+ <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension">+ <parameter name="fancyParameterName" value="fancyParameterValue" />+ </bootstrap> </extensions>
이 라이브러리에는 다음 속성이 제공됩니다.
#[RequiresClass]
#[RequiresPackage]
#[RequiresClass]
범위: 클래스 및 메서드 수준
이 속성을 사용하면 특정 클래스가 존재하는 경우에만 실행되도록 테스트 또는 테스트 케이스를 표시할 수 있습니다. 주어진 클래스는 현재 클래스 로더(일반적으로 Composer의 기본 클래스 로더)에 의해 로드 가능해야 합니다.
기본적으로 존재하지 않는 클래스가 필요한 테스트 사례는 건너뜁니다. 그러나 이 동작은 handleMissingClasses
확장 매개변수를 사용하여 구성할 수 있습니다. fail
로 설정하면 클래스가 누락된 테스트 사례가 실패합니다(기본값은 skip
).
<확장자> <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension"> <parameter name="handleMissingClasses" value="fail" /> </부트스트랩> </확장자>
최종 클래스 DummyTest는 TestCase를 확장합니다. { #[RequiresClass(AnImportantClass::class)]공용 함수 testDummyAction(): void{// ...} }
수업 수준:
#[RequiresClass(AnImportantClass::class)]final class DummyTest는 TestCase를 확장합니다. {public function testDummyAction(): void{// AnImportantClass가 없으면 건너뜁니다.}public function testOtherDummyAction(): void{// AnImportantClass가 없으면 건너뜁니다.} }
방법 수준:
최종 클래스 DummyTest는 TestCase를 확장합니다. { #[RequiresClass(AnImportantClass::class)]public function testDummyAction(): void{// AnImportantClass가 누락된 경우 건너뛰었습니다.}public function testOtherDummyAction(): void{// 건너뛰지 않았습니다.} }
수업 수준:
#[RequiresClass(AnImportantClass::class, '이 테스트에는 `AnImportantClass` 클래스가 필요합니다.')]final class DummyTest는 TestCase를 확장합니다. {public function testDummyAction(): void{// AnImportantClass가 누락된 경우 맞춤 메시지와 함께 건너뛰었습니다.}public function testOtherDummyAction(): void{// AnImportantClass가 누락된 경우 맞춤 메시지와 함께 건너뛰었습니다.} }
방법 수준:
최종 클래스 DummyTest는 TestCase를 확장합니다. { #[RequiresClass(AnImportantClass::class, '이 테스트에는 `AnImportantClass` 클래스가 필요합니다.')]공용 함수 testDummyAction(): void{// AnImportantClass가 누락된 경우 사용자 정의 메시지와 함께 건너뜁니다.}공용 함수 testOtherDummyAction(): 무효{//건너뛰지 않음.} }
수업 수준:
#[RequiresClass(AnImportantClass::class, resultsBehavior: OutcomeBehavior::Fail)]final class DummyTest는 TestCase를 확장합니다. {public function testDummyAction(): void{// AnImportantClass가 없으면 실패합니다.}public function testOtherDummyAction(): void{// AnImportantClass가 없으면 실패합니다.} }
방법 수준:
최종 클래스 DummyTest는 TestCase를 확장합니다. { #[RequiresClass(AnImportantClass::class, resultsBehavior: OutcomeBehavior::Fail)]public function testDummyAction(): void{// AnImportantClass가 누락된 경우 실패합니다.}public function testOtherDummyAction(): void{// 실패하지 않습니다.} }
수업 수준:
#[RequiresClass(AnImportantClass::class)] #[RequiresClass(AnotherVeryImportantClass::class)]final class DummyTest는 TestCase를 확장합니다. {공용 함수 testDummyAction(): void{// AnImportantClass 및/또는 AnotherVeryImportantClass가 누락된 경우 건너뜁니다.}공개 함수 testOtherDummyAction(): void{// AnImportantClass 및/또는 AnotherVeryImportantClass가 누락된 경우 건너뜁니다.} }
방법 수준:
최종 클래스 DummyTest는 TestCase를 확장합니다. { #[RequiresClass(AnImportantClass::class)] #[RequiresClass(AnotherVeryImportantClass::class)]public function testDummyAction(): void{// AnImportantClass 및/또는 AnotherVeryImportantClass가 누락된 경우 건너뜁니다.}public function testOtherDummyAction(): void{// 건너뛰지 않습니다.} }
#[RequiresPackage]
범위: 클래스 및 메서드 수준
이 속성은 단일 테스트는 물론 전체 테스트 클래스에 대한 특정 패키지 요구 사항을 정의하는 데 사용할 수 있습니다. 필수 패키지는 Composer를 통해 설치될 것으로 예상됩니다. 선택적으로 버전 제약 조건과 사용자 정의 메시지를 정의할 수 있습니다.
중요한
이 속성은 Composer가 빌드한 빌드 시 생성된 InstalledVersions
클래스에서 설치된 Composer 패키지를 결정합니다. 이 클래스를 제대로 읽으려면 PHPUnit 부트스트랩 스크립트에 Composer가 생성한 자동 로더를 포함하는 것이 중요합니다.
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php"><! -- ... --></phpunit>
스크립트를 명령 옵션으로 전달할 수도 있습니다: phpunit --bootstrap vendor/autoload.php
기본적으로 요구 사항이 충족되지 않은 테스트 사례는 건너뜁니다. 그러나 이 동작은 handleUnsatisfiedPackageRequirements
확장 매개변수를 사용하여 구성할 수 있습니다. fail
로 설정하면 요구 사항이 충족되지 않은 테스트 사례는 실패합니다(기본값은 skip
).
<확장자> <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension"> <parameter name="handleUnsatisfiedPackageRequirements" value="fail" /> </부트스트랩> </확장자>
최종 클래스 DummyTest는 TestCase를 확장합니다. { #[RequiresPackage('symfony/console')]공용 함수 testDummyAction(): void{// ...} }
수업 수준:
#[RequiresPackage('symfony/console')]final class DummyTest는 TestCase를 확장합니다. {public function testDummyAction(): void{// Symfony/console이 설치되지 않은 경우 건너뜁니다.}public function testOtherDummyAction(): void{// Symfony/console이 설치되지 않은 경우 건너뜁니다.} }
방법 수준:
최종 클래스 DummyTest는 TestCase를 확장합니다. { #[RequiresPackage('symfony/console')]public function testDummyAction(): void{// Symfony/console이 설치되지 않은 경우 건너뜁니다.}public function testOtherDummyAction(): void{// 건너뛰지 않습니다.} }
수업 수준:
#[RequiresPackage('symfony/*')]final class DummyTest는 TestCase를 확장합니다. {public function testDummyAction(): void{// Symfony/* 패키지가 설치되지 않은 경우 건너뜁니다.}public function testOtherDummyAction(): void{// Symfony/* 패키지가 설치되지 않은 경우 건너뜁니다.} }
방법 수준:
최종 클래스 DummyTest는 TestCase를 확장합니다. { #[RequiresPackage('symfony/*')]public function testDummyAction(): void{// Symfony/* 패키지가 설치되지 않은 경우 건너뜁니다.}public function testOtherDummyAction(): void{// 건너뛰지 않습니다.} }
수업 수준:
#[RequiresPackage('symfony/console', '>= 7')]final class DummyTest는 TestCase를 확장합니다. {public function testDummyAction(): void{// 설치된 Symfony/console 버전이 < 7인 경우 건너뜁니다.}public function testOtherDummyAction(): void{// 설치된 Symfony/console 버전이 < 7인 경우 건너뜁니다.} }
방법 수준:
최종 클래스 DummyTest는 TestCase를 확장합니다. { #[RequiresPackage('symfony/console', '>= 7')]public function testDummyAction(): void{// 설치된 Symfony/console 버전이 < 7인 경우 건너뜁니다.}public function testOtherDummyAction(): void{// 건너뛰지 않았습니다.} }
수업 수준:
#[RequiresPackage('symfony/console', message: '이 테스트에는 Symfony 콘솔이 필요합니다.')]final class DummyTest는 TestCase를 확장합니다. {public function testDummyAction(): void{// 사용자 정의 메시지와 함께 Symfony/console이 설치되지 않은 경우 건너뜁니다.}public function testOtherDummyAction(): void{// 사용자 정의 메시지와 함께 Symfony/console이 설치되지 않은 경우 건너뜁니다. } }
방법 수준:
최종 클래스 DummyTest는 TestCase를 확장합니다. { #[RequiresPackage('symfony/console', message: '이 테스트에는 Symfony 콘솔이 필요합니다.')]public function testDummyAction(): void{// 사용자 정의 메시지와 함께 Symfony/console이 설치되지 않은 경우 건너뛰었습니다.}public function testOtherDummyAction(): void{// 건너뛰지 않음.} }
수업 수준:
#[RequiresPackage('symfony/console', resultsBehavior: OutcomeBehavior::Fail)]final class DummyTest는 TestCase를 확장합니다. {public function testDummyAction(): void{// Symfony/console이 설치되지 않은 경우 실패합니다.}public function testOtherDummyAction(): void{// Symfony/console이 설치되지 않은 경우 실패합니다.} }
방법 수준:
최종 클래스 DummyTest는 TestCase를 확장합니다. { #[RequiresPackage('symfony/console', resultsBehavior: OutcomeBehavior::Fail)]public function testDummyAction(): void{// Symfony/console이 설치되지 않은 경우 실패합니다.}public function testOtherDummyAction(): void{// 하지 않습니다. 실패하다.} }
수업 수준:
#[RequiresPackage('symfony/console')] #[RequiresPackage('guzzlehttp/guzzle')]final class DummyTest는 TestCase를 확장합니다. {공용 함수 testDummyAction(): void{// Symfony/console 및/또는 guzzlehttp/guzzle이 설치되지 않은 경우 건너뜁니다.}공용 함수 testOtherDummyAction(): void{// Symfony/console 및/또는 guzzlehttp/guzzle이 설치되지 않은 경우 건너뜁니다. 설치되었습니다.} }
방법 수준:
최종 클래스 DummyTest는 TestCase를 확장합니다. { #[RequiresPackage('symfony/console')] #[RequiresPackage('guzzlehttp/guzzle')]public function testDummyAction(): void{// Symfony/console 및/또는 guzzlehttp/guzzle이 설치되지 않은 경우 건너뜁니다.}public function testOtherDummyAction(): void{// 건너뛰지 않습니다. } }
CONTRIBUTING.md
를 살펴보시기 바랍니다.
이 프로젝트는 GNU General Public License 3.0(또는 그 이상)에 따라 라이센스가 부여되었습니다.