어떻게 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.테스트 의 구조
모든 테스트 는 다음 과 같 습 니 다:
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 개의 유용 한 도 구 를 설정 하 는 방법 을 배 웠 습 니 다.
현재 git 에 갈고리 추가./bin/ping 을 제출 하고 제출 한 테스트 를 지속 적 으로 통합 하여 실행 할 수 있 습 니 다.
갑자기 고 품질의 PHP 코드 를 쓰 는 것 을 막 을 수 있 는 것 은 아무것도 없 지 않 습 니까?
이상 은 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에 따라 라이센스가 부여됩니다.