문제

PHP 세계에서 테스트가 얼마나 광범위하게, 지원되고, 개발되었습니까?자바와 동등합니까?Ruby/Rails가 있나요?Google에서 테스트 프레임워크가 존재한다는 것을 발견했지만 널리 사용되는지 궁금합니다.

주요 PHP IDE에는 Eclipse의 Java 도구나 NetBeans의 Ruby/Rails 도구와 같은 내장 테스트 실행기가 있습니까?Rails와 마찬가지로 PHP의 MVC 프레임워크에도 테스트가 내장되어 있나요?

내가 일하는 그룹에서 PHP 앱을 개발할 사람을 고용하고 싶어해서 질문합니다.이 일을 지원해야 할 수도 있으므로 품질과 유지 관리가 걱정됩니다.

도움이 되었습니까?

해결책

적어도 두 개의 성숙, 독립형 주니 스타일 테스트 스위트가 있습니다. phpunit 그리고 단순합니다, 각각.

MVC 프레임 워크가 진행되는 한 Symfony는 자체 테스트 프레임 워크를 가지고 있습니다. 라임, 코드 점화기에는 a가 있습니다 unit_test 도서관 및 케이크 앞서 언급 한 단순한 것에 의존합니다.

Zend Studio는 PHPUnit 테스트를 지원했으며 PhPunit과 SimpleTest는 명령 줄 러너를 보유하고 있으므로 모든 워크 플로에 통합 할 수 있습니다.

개발자가 그들을 활용하려면 PHP 세계에 도구가 있습니다.

경고는 과정 PHP 불만에 대한 귀하의 파입니다. PHP 커뮤니티가 두 개 있습니다. 소프트웨어를 구축하기위한 플랫폼으로서의 PHP, 웹 서버, 웹 브라우저 및 데이터베이스와 상호 작용하여 웹에서 응용 프로그램과 같은 항목을 생성하는 방법으로 PHP. 흑백이 적고 연속체입니다. 소프트웨어 개발자 사이드 장치 테스트 및 TDD는 다른 플랫폼에서만큼 지원되고 사용됩니다. "내가 이해하지 못하는 많은 것들을 모으고 여전히 사람들을 얻는다"는 "사람들이 여전히 사람들을 얻는다"고, 그것은 들어 본 적이 없다.

유용한 테스트 하네스를 얻기가 어려운 비 프레임 워크/커스텀 프레임 워크 레거시 PHP 코드가 많이 있습니다. PHP는 또한 브라우저 환경의 존재에 의존하는 패턴에 쉽게 빌려줍니다. 나는 내 자신의 관찰 이외의 다른 것을 뒷받침 할 증거가 없지만 테스트에 관심이있는 많은 PHP 상점은 실제 단위 테스트, 테스트 우선 등을 대체하는 수락 테스트 (즉, 셀레늄)에 의존하게됩니다. . 개발.

특정 상황에서 개발자의 지옥을 인터뷰하여 그룹이 고용 할 것입니다.

  1. 그들이 어떤 단위 테스트 프레임 워크를 사용하는지 물어보십시오

  2. 그들에게 일반적으로 새로운 기능과 지원 테스트를 개발 한 시간의 실제 예를 설명하도록 요청하십시오.

  3. 일반적으로 테스트가 실패한 시간과 상황을 해결하기 위해 무엇을했는지에 대한 실제 예제를 설명하도록 요청하십시오.

당신은 그들이 설명 할 특정 상황에 관심이 적고 그들이 코드 테스트에 대한 지식에 대해 얼마나 편안하게 논의하고 있는지에 더 관심이 있습니다.

다른 팁

Xunit 스타일 도구로 프로젝트를 TDD 할 때마다 올바른 지점에 머리를 잡는 데 어려움이 있습니다. 나는 행동 중심 개발을 위해 설계된 도구를 사용하거나 "예제별 사양"더 쉽게 할 수 있습니다 TDD를 맞습니다 - 즉 디자인, 노출 의도 및 특정 상황에서 행동을 설명합니다. 아니다 테스트.

즉, 소개하고 싶습니다 PECS 대화로. 프로젝트 사이트의 README에서.

PECS는 PHP 5.3, LA RSPEC 또는 JSPEC의 작은 행동 중심 개발 라이브러리입니다.

JSPEC 이상을 사용한 경우 아직 재스민 -BDD (JavaScript의 경우) 행동을 설명하는 PECS 스타일은 정말 친숙해야합니다. 이 스타일은 구성 요소 수준 사양에 적합합니다. 기능 레벨 사양 (스토리 또는 사용자 수락 테스트)을위한 PHP 도구를 찾고 있다면 고려하십시오. behat.

PECS로 돌아가서 PECS 프로젝트 사이트에서 컬링 된 예입니다.

describe("Bowling", function() {
  it("should score 0 for a gutter game", function() {
    $bowling = new Bowling();
    for ($i=0; $i < 20; $i++) {
      $bowling->hit(0);
    }
    expect($bowling->score)->to_equal(0);
  });
});

예, 그것은 PHP 사양입니다. PECS 소스를 살펴보면 PHP 5.3+, Lambdas 및 Closures의 새로운 뜨거운 성을 활용하여 저자가 이것을 끌어낼 수있는 것처럼 보입니다. 따라서 이것은 PHP <5.3 (FYI)을 기준으로 모든 프로젝트에서 PEC를 사용할 수 없다는 것을 의미합니다.

또한, PEC는 phPUnit만큼 성숙하지 않거나 단순하지 않습니다. 그러나 PHP 커뮤니티에서 BDD의 지지자들은 레거시 Xunit 테스트 도구를 사용해야함으로써 혼란스럽지 않은 "예제별"또는 BDD와 같은 PEC와 같은 도구의 성장을 지원해야한다고 생각합니다.

요즘 나는 PHP보다 파이썬에서 더 많이 일합니다. 그러나 다음에 PHP 프로젝트를 선택할 때 소프트웨어 사양을 제작하기 위해 PECS와 같은 성숙하고 커뮤니티 지원 도구가 있으면 매우 기쁩니다.

나는 behat / mink에 대한 놀라운 경험을 가졌습니다. http://behat.org

나는 단위 테스트 플랫폼이 재미 있거나 경험이 아니기 때문에 다른 PHP와 동의합니다. BDD는 PHP 프레임 워크를 사용하는 경우 가장 좋은 방법입니다.

Repo 빌드 도구로 작곡가를 둘러싼 머리를 가장 큰 걸림돌 이었지만 Behat Mink Selenium Webdriver 독립형 서버 Jar를 놀라운 설계 및 회귀 테스트 도구로 사용할 수있었습니다. 우리는 Jenkins 서버에서 CakePHP 응용 프로그램에 대해 회귀 제품군을 실행했지만 충분히 "빠르게 실패"하는 것으로 판명되었습니다.

이제 우리의 워크 플로우는 다음과 같습니다. Gherkin Refine Story Writ

작동하는 Behat 설정으로 Ubuntu VM을 설정하고 모든 워크 스테이션에 복사했습니다. 우리는 그것을 우리의 과정으로 구워 냈습니다. 우리는 단지 변경 테스트를 중단 한 다음 새로운 물건을 코딩하기 시작합니다.

우리는 쉘 스크립트를 작성하여 MySQL 덤프를 자동으로 실행하고 리팩토링 코드를 산들 바람으로 만들었던 각 기능 전에로드했습니다.

Mink WebAssert 클래스는 동작을 검증하는 데 필요한 모든 주장을 제공합니다. 일반 세션 / CommonContext 클래스는 CSS 또는 XPath를 사용하는 데 좋습니다.

나는 이전에 Java 및 Rails 프로젝트와 함께 Capybara / Webdriver를 사용했으며 Behat에 비해 설정 오버 헤드 / 학습 곡선이 너무 높다는 것을 알았습니다.

라이브러리/프레임 워크 외에도 앨런 이미 언급했지만, 당신은 mod_perl의 apache :: 테스트를 사용할 수 있습니다. 테스트를 릴리스 프로세스에 단순히 통합 할 수 있습니다. 하네스가 사용됩니다 수도꼭지 라이브러리를 사용하여 테스트가 통과되는지 또는 실패 여부를 결정하기 위해 출력 (모든 프로토콜을 테스트) 테스트 :: 간단합니다 또는 테스트 :: more ( 그리고 PHP).

상자 밖에서 Apache :: Test는 Perl과 PHP 모두에서 테스트 작성을 지원합니다. 내 프로젝트에서는 조금 걸렸습니다 약간의 속임수 그리고 실제로 그것을 작동시키기 위해 많은 독서가 있지만 테스트 :: PHP에서 더보기 하네스에 내장되어 있습니다. PHP와 PERL로 작성된 모든 테스트를 실행하는 것은 단일 명령을 통해 수행되며 그 과정에서 실패는 Apache :: 테스트를 포착하여 무엇이 잘못되었는지 가장 잘 지적합니다.

이 모든 것에 대한 멋진 부분은 PhPunit 또는 이전 두 테스트 프레임 워크와 함께 간단한 테스트를 활용할 수 있다는 것입니다. 각각의 각 라이브러리에서 테스트를 실행하면 Test :: More (또는 STDOUT를 테스트하여 PERL)의 PHP 구현을 사용하고 하네스가 해석 할 수 있도록 탭을 뱉을 수 있습니다.

반드시 읽으십시오 아파치 :: 테스트 문서와 Apache 실행에 대한 mod_perl 안내서 :: 테스트. 또한 기사를 찾았습니다 여기 큰 도움.

빠른 예로, 사이트의 모든 페이지 (링크가있는)를 통해 실행되는 몇 줄의 코드로 Perl에서 테스트를 설정하고 모든 결과를 확인할 수 있습니다.200 OK'응답 및 구문 분석 오류가 없습니다.

#!perl

use strict;
use warnings;

use Apache::Test qw(:withtestmore);
use Apache::TestRequest;
use Test::More;
use Test::WWW::Mechanize;
use WWW::CheckSite::Validator;
use WWW::CheckSite::Spider;

plan 'no_plan';

my $config = Apache::Test::config();
my $host = "http://". Apache::TestRequest::hostport($config) || '';

my $s = WWW::CheckSite::Spider->new(
    uri => $host,
    ua_class => 'Test::WWW::Mechanize',
);
my $m = $s->current_agent;

while (my $page = $s->get_page) {
    is($m->status(), "200", $m->uri() ." retrieved successfully.");
    $m->content_lacks("Parse Error", $m->uri() ." does not contain syntax errors.");
}

지난 프로젝트에서 저는 PHPUnit을 사용했는데, 그게 마음에 들었습니다.PhPunit + Command Line은 테스트를 실행하여 테스트를 코딩하는 데 너무 많은 시간을 소비하고 빠르지 않았으며 실제로 코드의 스타일을 내가 좋아하지 않는 방식으로 제한하는 것처럼 보였습니다 (물체는 테스트하기 쉽기 때문에 대상을 선호하는 것처럼 보였습니다).

Selenium은 우리가 이야기했지만 한번도 실행해 본 적이 없는 솔루션이었고, 그런 종류의 출력 수준 테스트가 정말 도움이 되었을 것이라고 생각합니다.

이 최신 프로젝트에서 수석 프로그래머는 우리가 소프트웨어를 개정하면서 보다 기능적인 프로그래밍 접근 방식을 취했습니다.제가 TDD를 통해 코딩하고 싶다고 말했을 때, 그는 제가 PHPUnit만큼 사용하기에 효과적이라고 생각하는 맞춤형 솔루션을 하루 안에 만들어냈습니다.게다가 객체지향과 객체지향의 문제에 대해 정말 눈을 뜨게 해주셨어요.함수형 프로그래밍.

처음부터 처음부터 시작된 첫 번째 프로젝트는 객체 지향 코딩, 대규모 단위 테스트 프레임워크로 1층에서 단일화되어 빠르게 정체되었습니다.두 번째 프로젝트는 5년의 역사와 오래된 코드를 갖춘 잘 확립된 CMS 소프트웨어이지만 기능적 프로그래밍 패러다임과 간단한 테스트 프레임워크(실제로는 PHP Assert를 자주 사용함) 덕분에 복잡해지기보다는 더욱 단순해졌습니다.

두 번째 프로젝트 역시 Selenium을 구현하는 지점에는 도달하지 못했지만(그리고 여전히 그것이 유익할 것이라고 생각합니다), 함수형 프로그래밍 접근 방식을 사용하면 코드 내 테스트를 더 쉽게 처리할 수 있습니다.

방금이 질문을 찾았고, 아직도 무슨 일이 일어나고 있는지 알아내는 "연구 단계"에있는 동안. 방금 Ruby on Rails가 "Cucumber"라는 것을 발견했습니다. http://cukes.info/

그것은 본질적으로 루비에게 '스토리 중심의 개발'이며, 적어도 내가 여행에서 본 한 기능 테스트 영역에서 금 표준 일 것입니다. (나는 이것을 공개적으로 올려 놓으므로 전문가들은 내가 틀렸을 때 나를 수정할 수 있습니다)

오이의 언어의 예로서, 당신은 SQL과 매우 유사한 것을 가지고 있습니다. 하지만 더 인간 읽기 쉬운 것 같습니다. Cukes의 첫 페이지에서 그들의 언어는 다음과 같습니다.

 Scenario: Add two numbers
      Given I have entered 50 in the calculator
      And I have entered 70 in the calculator
      When I press add
      Then the result should be 120 on the screen

위의 내용은 테스트로 컴파일하고 실행됩니다.

이제 PHP -BDD & TDD에 대한 질문에 대답 할 수있는 시점의 모든 서문입니다.

위의 의견을 반영 할 때 PHPUnit은 단위 테스트를 허용 하며이 블로그 게시물에 따르면 다음과 같습니다. http://sebastian-bergmann.de/archives/738-support-for-bdd-and-in-phpunit-3.html 또한 "스토리 스타일"BDD 테스트를 지원합니다.

위에서 언급 한 "SimpleTest"와 관련하여 위의 답변을 확장하려면 ST 시스템에는 브라우저 자동화를위한 브라우저 객체 클래스가 내장되어 있으며 PhPunit은 셀레늄 브라우저 자동화를위한 확장 기능이 있습니다. http://seleniumhq.com (셀레늄 대 단순화의 장점은 셀리늄이 온 페이지 자바 스크립트를 실행하는 반면 단순한 것이 아니라는 것입니다).

이 정보가 여러 달 개인 연구와 위의 기술에 대한 실습 시행 착오의 결과 이므로이 정보가 도움이되기를 바랍니다. 위의 내용에 대한 이해를 명확히하고 향상시킬 수있는 전문가가 있다면 피드백을 환영합니다.

  • 알렉스.

Michael Booth의 BDD 테스트 기능 비교 두 언어 :

http://mechanicallobotfish.com/posts/117-ruby-vs-php-bdd-beauty-contest-no-contest

이 시점에서 PHP BDD 도구와 문화가 저개발 된 것으로 결론을 내립니다.

지식 (서적, 비디오, 기사, 블로그 게시물) 또는 도구 (RSPEC, Doota, Factory Girl, Mocha, Cucumber) 측면에서 Ruby 프로그래머가 이용할 수있는 것과 비슷한 것은 없습니다.

체크 아웃하고 싶을 수도 있습니다 phpstorm. 나는 IDE 내에서 phpunit을 사용하는 테스트 러너를 좋아합니다.

이제 BDD 테스트를위한 "스펙트럼"프레임 워크를 개발하고 있습니다. https://github.com/m-haritonov/spectrum

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top