Entropy는 PHPUnit에서 무작위 테스트 작업을 위한 도구뿐만 아니라 rand
및 shuffle
과 같은 PHP의 무작위 함수를 사용하는 테스트 시스템을 위한 도구를 제공하는 라이브러리입니다.
때때로 단위 테스트에는 전역 상태 변경이 필요하거나 해당 상태를 변경하는 기능이 포함됩니다. 이는 결코 이상적인 상황은 아니지만 다른 테스트에 대한 의도하지 않은 종속성이 생성되는 결과를 낳는 경우가 많습니다.
Entropy의 테스트 순서 섞기 기능을 활성화하면 테스트 순서가 무작위로 지정되어 이러한 종속성을 강조하는 데 도움이 됩니다.
Entropy의 테스트 순서 섞기는 또한 PHPUnit의 @depends
기능을 사용하여 테스트 순서를 변경하는 것을 방지합니다. 향후 작업에서는 적절한 경우 이러한 테스트에 대해 셔플링이 계속 발생할 수 있도록 노력할 것입니다.
때로는 함수에 대한 입력 범위가 너무 커서 해당 입력의 단면을 취하는 것이 리소스를 더 효율적으로 사용하는 상황에 처할 수 있습니다. 하지만 해당 단면에 테스트가 실패할 수 있는 구멍이 있으면 어떻게 될까요?
이 문제를 해결하는 한 가지 방법은 무작위 입력을 사용하는 것입니다. 여기서 입력은 범위의 무작위 단면을 얻는 방식으로 생성됩니다. 즉, rand
또는 다른 비결정적 접근 방식을 사용합니다.
이 속성 기반 테스트의 확장은 응용 프로그램이나 기능에 무작위 입력을 적용하고 알려진 결과에 대한 정확한 동등성을 테스트하는 대신 출력이 특정 규칙을 준수하거나 입력과 관련된 특정 속성을 가지고 있는지 관찰하는 관행입니다. 세트.
테스트를 위한 무작위 시드를 관리함으로써 Entropy는 이러한 접근 방식을 사용할 수 있을 뿐만 아니라 고정 시드를 수락하거나 테스트 스위트가 통과할 때까지 마지막 실패한 실행에서 복구하여 반복 가능하게 만들 수도 있습니다.
Composer를 사용하여 프로젝트에 이 라이브러리를 추가할 수 있습니다.
$ composer require datto/phpunit-entropy
일단 구성되면 테스트 스위트를 정상적으로 실행할 수 있습니다. 청취자는 스스로를 돌볼 것입니다. 테스트 오류 또는 실패 시 사용된 시드는 임시 파일에 저장되므로 다음 실행 시 새 시드가 생성되는 대신 재사용됩니다.
난수 생성기의 시드는 최대 4개 위치에서 제공되며 여기에는 우선순위로 표시됩니다.
설정된 경우 SEED
환경 변수는 다른 설정을 재정의하는 데 사용됩니다. export
통해 설정할 수 있지만 현재 실행에만 설정하는 것이 좋습니다.
SEED=123456 phpunit -c phpunit.xml tests
시드는 구성에 따라 고정될 수 있습니다. 아래 구성 섹션을 참조하세요.
테스트 실행이 실패하면 사용된 시드가 임시 파일에 저장됩니다. 그런 다음 후속 테스트에서 로드되고 제품군이 다시 성공할 때까지 지속됩니다.
위의 방법으로 시드가 설정되지 않은 경우 마지막 방법은 PHP의 rand
함수를 사용하는 것입니다.
Composer를 통해 설치한 후에는 PHPUnit 구성 파일(보통 phpunit.xml
)을 변경하기만 하면 테스트 리스너를 구성할 수 있습니다.
< phpunit xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance "
xsi : noNamespaceSchemaLocation = " http://schema.phpunit.de/4.1/phpunit.xsd "
backupGlobals = " false "
colors = " true "
bootstrap = " bootstrap.php "
>
< listeners >
< listener class = " DattoPHPUnitEntropyListener " >
< arguments >
< array >
< element key = " seeding " >
< array >
< element key = " enabled " >
< boolean >true</ boolean >
</ element >
< element key = " seed " >
< integer >1234567</ integer >
</ element >
< element key = " file " >
< string >/tmp/phpentropy-seed</ string >
</ element >
</ array >
</ element >
< element key = " shuffle " >
< boolean >true</ boolean >
</ element >
</ array >
</ arguments >
</ listener >
</ listeners >
</ phpunit >
true로 설정하면 난수 생성기가 리스너에 의해 시드됩니다.
이 인수를 통해 시드를 설정하면 이 값만 난수 생성기 시드에 사용됩니다. 아래의 시드 우선순위 섹션을 참조하세요.
설정된 경우 이 파일은 마지막으로 실패한 무작위 시드를 저장하는 데 사용됩니다. 기본값은 [TMPDIR LOCATION]/phpunit-entropy-seed
입니다.
true로 설정하면 단위 테스트가 실행되는 순서가 무작위로 지정됩니다( @depends
사용 중인 제품군 제외). 이는 테스트 간 종속성을 결정하고 식별하는 데 유용합니다.
크리스토퍼 홀트 <[email protected]>