2013-02-12 108 views
27

我一直在環顧SO和Google,但我無法真正得到明確的答案。PHPUnit&Behat;補充或替代?

PHPUnit是一個單元測試框架,就像JUnit一樣。我使用它,並結合Selenium-extension進行功能測試。瀏覽時,我看到Behat/Mink不斷提及。但我不完全理解Behat如何適應這裏。

隨着Behat你用可讀的格式編寫場景。 Behat可以將其轉化爲一個新項目的骨架類?但它是否也爲單元測試提供了框架類?你用Behat編寫單元測試,還是使用PHPUnit/SimpleTest?

但是Behat/Mink確實取代了PHPUnit_Selenium-extension的功能測試嗎?

您是否僅將Behat用於新項目,還是可以將其改編爲現有項目?

回答

12

是的,我會考慮Behat是phpUnit的替代品,它既用於通用代碼測試,也用於使用瀏覽器自動化的功能測試。

對於一般測試,phpUnit是一個更成熟的產品,而Behat則專注於使用「BDD」方法(行爲驅動設計)編寫的測試。 phpUnit也有BDD功能,但Behat更多地針對這種風格。

由於我們談論的是功能瀏覽器測試而不是單元測試,因此您可能沒有考慮一些功能更強大的單元測試功能;你只是想編寫瀏覽器自動化。爲此,你真的可以選擇你最適合的兩種西服中的哪一種。

有微妙的邊緣情況下,他們每個人都有優勢,但在大多數情況下,他們都能夠跨各種瀏覽器運行測試腳本。

我喜歡Behat/Mink,理由是它更靈活;它可以支持多種瀏覽器自動化引擎,包括Selenium和Sahi,這意味着如果你遇到問題,你可以將測試切換到另一個,繼續進行。我們有這種確切的情況,試圖讓一些Mink測試腳本在Selenium中工作;切換到Sahi使其工作,並涉及只改變一行測試代碼。

另外值得一提的是,如果你不想寫BDD風格的測試,Mink可以在沒有Behat的情況下自行使用。

+0

因此,對於沒有考慮BDD的現有應用程序,您將使用PHPUnit?而對於一個新項目,使用BDD,更喜歡Behat? – qrazi 2013-02-12 11:29:02

+0

我對貂皮的偏好主要是回答編寫功能性瀏覽器測試腳本的問題,因爲它的靈活性。我提到了BDD方面,但我沒有真正考慮到這個問題。對於我自己,我使用phpUnit進行單元測試,並使用Mink/Sahi進行功能測試。 (但我們正在考慮將我們的功能測試轉移到Javascript,以減少測試腳本和瀏覽器之間的軟件層數) – SDC 2013-02-12 11:49:48

+2

PHPSpec以BDD方式執行PHPUnit的工作... – ottsch 2013-02-12 22:59:42

32

我會認爲Behat是互補到PHPunit。我的意思是通過使用Behat進行測試行爲的補充,PHPUnit用於測試代碼。使用BDD/TDD,人們首先會根據用戶故事編寫測試。爲了通過測試,您通常會使用TDD編寫多個PHPUnit測試來創建能夠通過BDD測試的應用程序。

BDD應該測試行爲並且不知道應用程序的代碼,比如實體/控制器/接口。您應該可以將完整的應用程序替換爲另一個應用程序,並且在應用程序的行爲相同時仍然​​可以通過所有測試。

TDD除了像你的想法之類的其他東西之外,還應該指導你的類的結構和它們之間的交互。除此之外,他們還證明你的方法可以做他們應該做的事情,明確目標,並且可以毫無恐懼地進行重構。

+0

非常清楚。謝謝! – 2016-03-05 11:28:05

+1

BDD沒有任何指定級別的東西。你可能正在測試一個單元的行爲。從這個意義上說,BDD可以適用於單元測試。 – 2017-01-11 23:20:36

5

似乎這個答案都是錯的。

phpunit是單元測試,並通過它堅持TDD。

phpspec和behat是一個功能測試,所以它是BDD。

他們互相補充,一個完美的場景將是一個項目,你有兩種類型的測試,但這可能只限於有能力做到這一點的大項目。

TDD測試單個或只是幾個類。 BDD在應用程序中的多個模塊上測試完整功能。

+6

Phpspec是單元測試沒有功能! – user3746259 2016-03-09 12:43:56