어떻게 PHP 코드 의 질 을 향상 시 키 는 지 에 대한 간단 한 설명

개술
여기 서 우 리 는 행위 구동 개발 을 위 한 구축 도구 인 공식 PHP 의 Cucumber 실현-Behat 를 사용 할 수 있다.우 리 는 다음 코드 를 실행 해서 그것 을 설치 할 수 있다.
$ php composer.phar require --dev behat/behat
build.xml 에 대상 추가(본문 첫 부분 에서 Phing 설정 설명)

<target name="behat">
	<exec executable="bin/behat" passthru="true" checkreturn="true" />
</target>…
<target name="run" depends="phpcs,phpcpd,phan,phpspec,behat" />
그리고 파일 features/price.feature 의 테스트 에 규범 을 만들어 야 합 니 다.
Feature: Price Comparison In order to compare prices As a customer I need to break the currency barrier Scenario: Compare EUR and PLN Given I use nbp.pl comparator When I compare “100EUR” and “100PLN” Then It should return some result
이 테스트 장면 은 읽 기 쉬 우 며,이 특성 이 어떻게 일 해 야 하 는 지 에 대한 좋 은 인상 을 주어 야 한다.불 행 히 도 컴퓨터 는 인간 의 언어 를 제대로 이해 하지 못 하기 때문에 이 제 는 모든 단 계 를 위해 코드 를 작성 할 때 입 니 다.
코드 템 플 릿 을 만 들 기 위해 서.../bin/behat-init 를 실행 할 수 있 습 니 다.이런 종 류 를 만 들 것 입 니 다:

//features/bootstrap/FeatureContext.php use Behat\Behat\Context\SnippetAcceptingContext;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;
class FeatureContext implements SnippetAcceptingContext{
	/** * Initializes context. */ public function __construct() { }
}
그리고 실행 할 수 있 습 니 다:
$ bin/behat --dry-run --append-snippets
Behat 는 장면 에서 정 의 된 모든 단계 에 함 수 를 자동 으로 생 성 합 니 다.
이제 함수 의 주 체 를 채 워 서 진정한 검 사 를 시작 할 수 있 습 니 다.

// features/bootstrap/FeatureContext.php
<?php
use Behat\Behat\Context\Context;
use Domain\Price;use Domain\PriceComparator;
use Infrastructure\NBPPriceConverter;
/*** Defines application features from the specific context.*/
class FeatureContext implements Context{
	/** @var PriceComparator */ 
	private $priceComparator;
	/** @var int */ 
	private $result; 
	/** * Initializes context. * 
	* Every scenario gets its own context instance.
	* You can also pass arbitrary arguments to the* context constructor through behat.yml. */
	public function __construct() { 
		
	} 
	/** * @Given I use nbp.pl comparator */ 
	public function iUseNbpPlComparator() {
		$this->priceComparator = new PriceComparator(new NBPPriceConverter());
	} 
	/** * @When I compare :price1 and :price2 */
	public function iCompareAnd($price1, $price2) {
		preg_match('/(\d+)([A-Z]+)/', $price1, $match1); 
		preg_match('/(\d+)([A-Z]+)/', $price2, $match2);
		$price1 = new Price($match1[1], $match1[2]);
		$price2 = new Price($match2[1], $match2[2]);
		$this->result = $this->priceComparator->compare($price1, $price2); 
	} 
	/** * @Then It should return some result */ 
	public function itShouldReturnSomeResult() {
		if (!is_int($this->result)) {
			throw new \DomainException('Returned value is not integer');
		} 
	}
}
마지막 으로.../bin/ping 을 사용 하여 모든 테스트 를 실행 합 니 다.너 는 다음 과 같은 결 과 를 얻어 야 한다.
Buildfile: /home/maciej/workspace/php-testing/build.xmlMyProject > phpcs: MyProject > phpcpd: phpcpd 4.0.0 by Sebastian Bergmann.0.00% duplicated lines out of 103 total lines of code. Time: 17 ms, Memory: 4.00MB MyProject > phan: MyProject > phpspec: / skipped: 0% / pending: 0% / passed: 100% / failed: 0% / broken: 0% / 3 examples2 specs3 examples (3 passed)15ms MyProject > behat: Feature: Price Comparison In order to compare prices As a customer I need to break the currency barrier Scenario: Compare EUR and PLN # features/price.feature:6 Given I use nbp.pl comparator # FeatureContext::iUseNbpPlComparator() When I compare "100EUR" and "100PLN" # FeatureContext::iCompareAnd() Then It should return some result # FeatureContext::itShouldReturnSomeResult()1 scenario (1 passed)3 steps (3 passed)0m0.01s (9.13Mb) MyProject > run: BUILD FINISHED Total time: 1.1000 second
보시 다시 피 Behat 는 우리 의 응용 프로그램 이 무엇 을 했 는 지,결과 가 무엇 인지 설명 하 는 좋 은 보고 서 를 준 비 했 습 니 다.다음 에 프로젝트 매니저 가 테스트 에서 어떤 장면 과 관련 이 있 는 지 물 었 을 때 그 에 게 Behat 출력 을 해 줄 수 있 습 니 다!
1.테스트 의 구조
모든 테스트 는 다음 과 같 습 니 다:
  • 이 장면 에 대한 준 비 는'Given'부분 으로 표시
  • "When"부분 에 포 함 된 동작 들
  • 일부 검사 가'Then'부분 으로 표 시 됨
  • 각 부분 마다"And"키워드 와 연결 하 는 여러 절 차 를 포함 할 수 있 습 니 다.
    Scenario: Compare EUR and PLN Given nbp.pl comparator is available And I use nbp.pl comparator When I compare "100EUR" and "100PLN" And I save the result Then It should return some result And the first amount should be greater
    2.문맥
    Behat 는 테스트 를 위해 여러 개의 컨 텍스트 를 정의 할 수 있 습 니 다.이것 은 절차 코드 를 여러 종류 로 나 누 어 다른 각도 에서 당신 의 장면 을 테스트 할 수 있다 는 것 을 의미한다.
    예 를 들 어 웹 컨 텍스트 에 코드 를 작성 할 수 있 습 니 다.프로그램 HTTP 컨트롤 러 를 사용 하여 테스트 절 차 를 실행 합 니 다."domain"컨 텍스트 를 만 들 수도 있 습 니 다.PHP API 호출 만 사용 하여 업무 논 리 를 실행 할 것 입 니 다.이런 방식 을 통 해 당신 은 단독으로 업무 논리 통합 을 테스트 하고 말단 응용 프로그램 에서 테스트 할 수 있 습 니 다.
    Behat 에서 많은 컨 텍스트 를 만 드 는 방법 에 대한 더 많은 정 보 는 참고 하 시기 바 랍 니 다.http://behat.org/en/latest/userguide/context.html문서
    3、Behat 사용 방법 
    처음에 언급 했 듯 이 Behat 를 사용 하여 통합 테스트 를 할 수 있 습 니 다.일반적으로 당신 의 코드 는 외부 제3자 시스템 에 의존 합 니 다.우리 가 두 번 째 부분 에서 단원 테스트 를 작성 할 때,우 리 는 항상 외부 의존 관계 가 예 상 했 던 것 처럼 일한다 고 가정한다.Behat 를 사용 하면 테스트 장면 을 작성 할 수 있 습 니 다.코드 를 자동 으로 실행 하고 실제 장면 의 서 비 스 를 정확하게 사용 하 는 지 확인 할 수 있 습 니 다.
    가장 중요 한 것 은 Behat 가 테스트 시스템 에서 사용 하 는 복잡 한 말단 장면 에 매우 유용 하 다 는 것 이다.읽 을 수 있 는 이름 뒤에 숨 어 테스트 절차 에 필요 한 복잡 한 코드 를 실행 하고 누구나 이해 할 수 있 는 장면 을 만 들 수 있 습 니 다.
    총결산
    이상 의 글 에서 당신 은 프로젝트 에 6 개의 유용 한 도 구 를 설정 하 는 방법 을 배 웠 습 니 다.
  • PHing 은 빌 드 를 실행 하 는 데 사 용 됩 니 다
  • PHPCS 는 코드 형식 을 자동 으로 검사 하 는 데 사 용 됩 니 다
  • PHPCPD 는 중복 코드 를 검사 하 는 데 사용 되 는
  • Phan 은 고급 정적 코드 분석
  • 에 사용 된다.
  • PHPSpec 는 유닛 테스트
  • 에 사 용 됩 니 다.
  • Behat 는 말단 과 통합 테스트
  • 에 사용 된다.
    현재 git 에 갈고리 추가./bin/ping 을 제출 하고 제출 한 테스트 를 지속 적 으로 통합 하여 실행 할 수 있 습 니 다.
    갑자기 고 품질의 PHP 코드 를 쓰 는 것 을 막 을 수 있 는 것 은 아무것도 없 지 않 습 니까?
    이상 은 PHP 코드 의 질 을 어떻게 향상 시 키 는 지 에 대한 상세 한 내용 입 니 다.PHP 코드 의 질 을 어떻게 향상 시 키 는 지 에 대한 자 료 는 다른 관련 글 에 주목 하 십시오!

    좋은 웹페이지 즐겨찾기