2013-02-12 3 views
27

저는 SO와 Google을 둘러 보았지만 확실한 답을 얻을 수 없었습니다.PHPUnit & Behat; 보완 또는 대안?

PHPUnit은 JUnit과 같이 unittesting을위한 프레임 워크입니다. 기능 테스트를 위해 Selenium 확장과 함께 사용합니다. 주변을 탐색 할 때 Behat/Mink가 계속해서 언급되는 것을 볼 수 있습니다. 하지만 여기에 Behat이 어떻게 들어 맞는 지 완전히 이해하지 못합니다.

Behat에서는 사람이 읽을 수있는 형식으로 시나리오를 작성합니다. 그런 다음 Behat을 새 프로젝트의 스켈레톤 클래스로 변환 할 수 있습니까? 그러나 unittesting을위한 스켈레톤 수업도 제공합니까? Behat을 사용하여 unittest를 작성합니까 아니면 PHPUnit/SimpleTest를 사용합니까?

하지만 Behat/Mink는 기능 테스트를 위해 PHPUnit_Selenium-extension을 대체합니까?

새로운 프로젝트에만 Behat을 사용합니까, 아니면 기존 프로젝트에도 적용 할 수 있습니까?

답변

12

예, 일반적인 코드 테스트와 브라우저 자동화를 사용한 기능 테스트 모두에서 Behat을 phpUnit 대신 사용할 수 있습니다.

일반적인 테스트의 경우 phpUnit은보다 잘 정립 된 제품이지만 Behat은 "BDD"방법론 (Behavior Driven Design)을 사용하여 작성된 테스트에 중점을 둡니다. phpUnit도 BDD 기능을 가지고 있지만 Behat은 그 스타일을 목표로합니다.

단위 테스트보다는 기능적인 브라우저 테스트에 대해 이야기하고 있으므로 아마도 더 강력한 단위 테스트 기능에 대해 생각하지 않을 것입니다. 브라우저 자동화를 작성하기 만하면됩니다. 이를 위해, 당신은 정말 당신이 가장 잘 어울리는 두 옷을 골라 낼 수 있습니다.

각각의 경우에 강점이있는 미묘한 경계 사례가 있지만 대부분의 경우 둘 다 다양한 브라우저에서 테스트 스크립트를 실행할 수 있습니다.

필자의 선호는 Behat/Mink가 더 유연하다는 것을 의미합니다. Selenium과 Sahi를 포함한 여러 브라우저 자동화 엔진을 지원할 수 있습니다. 즉, 하나의 문제를 해결하면 테스트를 다른 것으로 전환하고 계속 수행 할 수 있습니다. 우리는 Selenium에서 작동하도록 Mink 테스트 스크립트를 얻으려고이 정확한 상황을 보았습니다. 사히 (Sahi) 로의 전환은 작동하게 만들었고 한 줄의 테스트 코드 만 변경하는 작업을 포함했습니다.

BDD 스타일 테스트를 쓰지 않으려는 경우 Mink를 Behat없이 사용할 수도 있습니다.

+0

그렇다면 BDD를 고려하지 않은 기존 응용 프로그램의 경우 PHPUnit을 사용 하시겠습니까? BDD를 사용하는 새로운 프로젝트의 경우 Behat을 선호합니까? – qrazi

+0

필자가 Mink에 대해 언급 한 선호도는 주로 유연성 때문에 기능성 브라우저 테스트 스크립트를 작성하는 문제에 답하는 것이 었습니다. BDD 측면에 대해서는 언급했지만 답변에 대해서는 고려하지 않았습니다. 나 자신을 위해, 나는 단위 테스트를 위해 phpUnit을, 기능 테스트를 위해 Mink/Sahi를 사용하고있다. (하지만 우리는 기능 테스트를 Javascript로 옮겨서 테스트 스크립트와 브라우저 사이의 소프트웨어 레이어 수를 줄이는 방안을 고려하고 있습니다) – SDC

+2

PHPSpec은 BDD 방식으로 PHPUnit의 작업을 수행합니다 ... – ottsch

32

내가 Behat을 으로 보완하고 PHP 단위로는을 보완 할 것입니다. 테스트 동작을 위해 Behat을 사용하고, 코드를 테스트하기 위해 PHPUnit을 사용하여 보완적인 방법을 사용합니다. BDD/TDD를 사용하면 먼저 사용자 스토리를 기반으로 테스트를 작성합니다. 테스트를 통과하려면 일반적으로 BDD 테스트를 통과 할 수있는 응용 프로그램을 만들기 위해 TDD를 사용하여 여러 PHPUnit 테스트를 작성해야합니다.

BDD는 동작을 테스트하고 엔터티/컨트롤러/인터페이스와 같은 응용 프로그램의 코드를 인식하지 않아야합니다. 전체 응용 프로그램을 다른 응용 프로그램으로 교체 할 수 있어야하며 응용 프로그램의 동작이 동일 할 때 모든 테스트를 통과해야합니다.

TDD는 마음과 같은 다른 것들과 더불어 클래스 간의 구조와 상호 작용을 안내해야합니다. 게다가, 그들은 당신의 방법이 자신이해야 할 일을하고, 의도를 명확히하며, 두려움없이 리팩터링이 가능하다는 것을 증명합니다.

+0

매우 명확합니다. 감사! –

+1

수준을 지정하는 BDD에는 아무 것도 없습니다. 당신은 유닛의 행동을 테스트 할 수 있습니다. 그런 의미에서 BDD는 단위 테스트에 적용될 수 있습니다. –

5

이 답변에 문제가있는 것 같습니다.

phpunit은 단위 테스트이며 TDD를 준수합니다.

phpspec 및 behat는 기능 테스트이므로 BDD입니다.

그들은 서로 보완 할 수 있습니다. 완벽한 시나리오는 두 유형의 테스트가 모두있는 프로젝트이지만이 작업을 수행 할 수있는 큰 프로젝트에만 제한 될 수 있습니다.

TDD 테스트 단일 또는 몇 가지 클래스. BDD는 응용 프로그램의 여러 모듈에서 완벽한 기능을 테스트합니다.

+6

Phpspec는 단위 테스트 기능이 없습니다! – user3746259