어떻게 PHP 코드 의 품질 을 향상 시 키 는 단원 테스트

1.유닛 테스트
단일 책임 원칙(우리 의 코드 는 기능 의 단일 부분 에 만 관심 을 가 져 야 한다)을 실현 함으로써 우 리 는 테스트 기간 에 프로젝트 의 일부분 만 동시에 주목 할 것 을 확보 할 것 이다.
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); 
	}
}
여기에 세 개의 함수 가 있다.
  • let()-의존 을 사용 하여 서 비 스 를 초기 화 할 수 있 습 니 다
  • 두 it *함수 구현 테스트.그 중 하 나 는$priceConverter 를 모 의 하 는 방법 으로 priceConverter 인 터 페 이 스 를 실현 하 는 것 입 니 다.이 인 터 페 이 스 는 테스트 대상 의 생 성 에 주입 되 었 습 니 다시 뮬 레이 션 을 만 드 는 것 이 매우 쉽다 는 것 을 볼 수 있다.당신 이 해 야 할 일 은 그것 을 테스트 함수 의 매개 변수 로 정의 하고 코드 를 실행 할 때 어떤 함 수 를 실행 해 야 할 지 지정 함으로써 mock 을 설정 하 는 것 입 니 다.필요 하 다 면 반환 값 도 설정 할 수 있 습 니 다.
    모든 테스트 방법 은$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 코드 의 질 을 향상 시 키 는 단원 테스트 에 관 한 자 료 는 우리 의 다른 관련 글 에 관심 을 가 져 주 십시오!

    좋은 웹페이지 즐겨찾기