어떻게 PHP 코드 의 품질 을 향상 시 키 는 단원 테스트
단일 책임 원칙(우리 의 코드 는 기능 의 단일 부분 에 만 관심 을 가 져 야 한다)을 실현 함으로써 우 리 는 테스트 기간 에 프로젝트 의 일부분 만 동시에 주목 할 것 을 확보 할 것 이다.
Liskov 교체 원칙 과 거꾸로 의존 하 는 원칙 을 사용 함으로써 우리 의 코드 는 우리 가 아 날로 그 의존 관 계 를 주입 하 는 지 에 관심 을 가지 지 않 습 니 다.적당 한 인 터 페 이 스 를 실현 하기 만 하면 됩 니 다.
유닛 테스트 에서 저 희 는 아 날로 그 대상 으로 모든 의존 하 는 서 비 스 를 교체 하고 싶 기 때문에 저 희 는 한 번 에 한 가지 유형 만 테스트 합 니 다.근 데 시 뮬 레이 션 이 뭐 예요?그것들 은 다른 대상 과 같은 인 터 페 이 스 를 실현 하 는 대상 이지 만,그들의 행 위 는 통 제 를 받는다.예 를 들 어 우리 가 가격 비교 서 비 스 를 만 들 고 있다 고 가정 하면 우 리 는 다른 서 비 스 를 이용 하여 현재 의 환율 을 얻 을 수 있다.우리 의 비교 기 를 테스트 할 때 우 리 는 특정한 화폐 에 특정한 환율 을 되 돌려 주 는 시 뮬 레이 션 대상 을 사용 할 수 있 기 때문에 우리 의 테스트 는 의존 하지 도 않 고 진정한 서 비 스 를 사용 하지 도 않 습 니 다.
2.어떤 프레임 을 사용 해 야 하나 요?
몇 개의 좋 은 틀 이 이 목적 을 달성 할 수 있다.가장 흔히 볼 수 있 는 것 은 PHPUnit 일 것 이다.내 가 하 는 일 에서,나 는 행동 방법 으로 테스트 를 작성 하 는 것 이 더 좋 은 결 과 를 가 져 올 수 있 고,나 로 하여 금 더욱 절박 하 게 테스트 를 작성 하 게 할 수 있다 는 것 을 발견 했다.우리 의 프로젝트 에 대해 우 리 는 phpspec 를 선택한다.
설치 과정 이 상당히 간단 합 니 다.-사용 만 하면 됩 니 다.
$ php composer.phar require --dev phpspec/phpspec
그리고 본문 첫 부분 에 PHing 을 설정 하면 build.xml 에 구축 목 표를 추가 할 수 있 습 니 다.
<target name="phpspec">
<exec executable="bin/phpspec" passthru="true" checkreturn="true">
<arg line="run --format=pretty" />
</exec>
</target>...
<target name="run" depends="phpcs,phpcpd,phan,phpspec" />
그리고 테스트 하고 싶 은 모든 서비스 클래스 에 테스트 클래스 를 만들어 야 합 니 다.PHPSpec 를 쉽게 사용 할 수 있 는 것 은 모델 생 성 입 니 다.엄격 한 입력 만 사용 하면 아 날로 그 대상 을 테스트 함수 의 매개 변수 로 설명 할 수 있 습 니 다.PHPSpec 에서 자동 으로 시 뮬 레이 션 을 만 듭 니 다.코드 예제 좀 봅 시다.
//spec/Domain/PriceComparatorSpec.php
<?php
namespace spec\Domain;
use Domain\Price;use Domain\PriceConverter;
use PhpSpec\ObjectBehavior;
class PriceComparatorSpec extends ObjectBehavior{
public function let(PriceConverter $converter) {
$this->beConstructedWith($converter);
}
public function it_should_return_equal() {
$price1 = new Price(100, 'EUR');
$price2 = new Price(100, 'EUR');
$this->compare($price1, $price2)->shouldReturn(0);
}
public function it_should_convert_first(PriceConverter $converter) {
$price1 = new Price(100, 'EUR');
$price2 = new Price(100, 'PLN');
$priceConverted = new Price(25, 'EUR');
$converter->convert($price2, 'EUR')->willReturn($priceConverted);
$this->compare($price1, $price2)->shouldReturn(1);
}
}
여기에 세 개의 함수 가 있다.모든 테스트 방법 은$this 컨 텍스트 에서 실 행 됩 니 다.아 날로 그 와 같은 문법 으로 결 과 를 쉽게 검사 할 수 있 습 니 다.
3,어떻게 설정 테스트?
Phpspec 는 좋 은 문 서 를 가지 고 있 지만,나 는 당신 에 게 일상적인 실천 에서 유용 한 기본 적 인 사례 를 보 여 주 려 고 합 니 다.
테스트 대상 구축
일반적으로 테스트 대상 을 설정 하 는 가장 쉬 운 방법 은$this->beConstructed With(...)방법 을 호출 하 는 것 입 니 다.이 방법 은 대상 구조 함수 에 전달 해 야 할 모든 params 를 매개 변수 로 합 니 다.
만약 당신 의 대상 이 공장 방법 을 사용 하여 만들어 야 한다 면,당신 은 사용 할 수 있 습 니 다.
this−>beConstructed Through(this−>beConstructed Through(methodName,$argumentsArray)방법.
아 날로 그 에서 실행 중인 매개 변수 와 일치 합 니 다.
phpspec 는 인간 과 매우 유사 한 문법 을 사용 하여 시 뮬 레이 션 을 설정 하 는 것 을 발견 할 수 있 을 것 이다.예 를 들 어 실행 할 때 아 날로 그 방법 인 someMethod 와 인자 인'required value'가 호출 되 었 는 지 확인 하려 면 다음 과 같은 테스트 에서 정의 할 수 있 습 니 다.
$mockObject->someMethod("desired value")->shouldBeCalled();
코드 의 행동 을 테스트 하려 면 mock 함수 가"some value"로 돌아 갈 때 호출 을 통 해 쉽게 설정 할 수 있 습 니 다.
$mockObject->someFunction("some input")->willReturn("some value");
때때로 우 리 는 mock 에 전달 되 는 정확 한 매개 변수 에 진정 으로 관심 이 없다.그리고 이 코드 를 쓸 수 있 습 니 다.
use Prophecy\Argument\Token\AnyValueToken;
$mockObject->someFunction(new AnyValueToken())->willReturn(true);
때때로 당신 은 일부 매개 변수 에 관심 을 가 질 수 있 습 니 다.검사 함 수 를 쓰 는 것 이 좋 습 니 다.그것 은 당신 에 게 몇 가지 방법 을 정확하게 호출 했 는 지 알려 줄 것 입 니 다.예 를 들 어:
use Prophecy\Argument\Token\CallbackToken;
$checker = function (Message $message) use ($to, $text) {
return $message->to === $to && $message->text === $text;
};
$msgSender->send(new CallbackToken($messageChecker))->shouldBeCalled()
일치 실행 시 이상。어떤 경우 에 이상 은 코드 인터페이스의 일부분 이다.너 는 그것들 이 특정한 장면 에서 던 져 지 기 를 바란다.다음 코드 를 작성 해서 이 작업 을 완성 할 수 있 습 니 다.
$this->shouldThrow(\DomainException::class)->during('execute', [$command, $responder]);
during()에 전 달 된 첫 번 째 매개 변 수 는 호출 할 방법의 이름 이 고 두 번 째 매개 변 수 는 우리 에 게 전 달 될 방법의 매개 변수 배열 입 니 다.4.어디서 더 많은 예 를 찾 을 수 있 습 니까?
본문 에서 우 리 는 단지 몇 가지 기본 적 인 용례 만 소개 하 였 다.phpspec 문 서 를 참고 하여 더 많은 예 시 를 찾 으 십시오.이 예제 들 은 테스트 코드 를 예 쁘 게 만 들 것 입 니 다!
코드 보급률
PHPSpec 는 코드 보급률 보고 서 를 만 드 는 등 확장 서브 시스템 을 추가 합 니 다.테스트 에서 코드 를 얼마나 실 행 했 는 지 확인 하려 면 도움 이 됩 니 다.
이 확장 자 를 아래 를 통 해 설치 할 수 있 습 니 다.
$ php composer.phar require --dev leanphp/phpspec-code-coverage
그리고 phpspec 를 만들어 서 사용 합 니 다.yml 파일 내용:
1 extensions: LeanPHP\PhpSpec\CodeCoverage\CodeCoverageExtension: ~
기본적으로 이 확장 자 는 PHP 의 Xdebug 확장 을 사용 하여 코드 보급률 정 보 를 생 성 합 니 다.그러나 PHP 의 이 컴퓨터 디 버 거-phpdbg 는 더 빠 를 것 입 니 다.
$ phpdbg -qrr phpspec run
이제 build 에서 phpspec 의 구축 목 표를 변경 할 수 있 습 니 다.xml:
<target name="phpspec">
<exec executable="phpdbg" passthru="true" checkreturn="true">
<arg line="-qrr bin/phpspec run --format=pretty" />
</exec>
</target>...
<target name="run" depends="phpcs,phpcpd,phan,phpspec" />
보고 서 는 덮어 쓰기/디 렉 터 리 에서 생 성 되 며,예 쁜 HTML 페이지 로 서 덮어 쓰기 테스트 를 할 수 있 습 니 다.이상 은 어떻게 PHP 코드 의 질 을 향상 시 키 는 단원 테스트 의 상세 한 내용 입 니 다.어떻게 PHP 코드 의 질 을 향상 시 키 는 단원 테스트 에 관 한 자 료 는 우리 의 다른 관련 글 에 관심 을 가 져 주 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.