在 Laravel 中使用 Behat 來加強測試的可讀性 - 進階篇

上一篇文章中,我介紹了如何把 Behat 整合到 Laravel 裡;不過後來我發現在專案規格越來越複雜時,把所有 step definitions 都寫在 FeatureContext 類別中變得非常不易閱讀。另一個問題就是我不想要用 putenv 函式來定義環境變數,而是希望能有 Behat-Laravel-Extension 把環境變數放在 .env.behat 裡的用法。

閱讀更多

在 Laravel 中使用 Behat 來加強測試的可讀性 - 基礎篇

Laravel 的測試框架是基於 PHPUnit 上所建立出來的,而在 Laravel 5.5 之後,測試框架的功能也大幅地加強了。只不過在越來越複雜的專案規格下,我個人覺得 PHPUnit 在情境案例的描述能力上還是不太夠,最好可以用人們看得懂的語言;而目前能夠用自然語言來描述規格情境的,當然就是 CucumberGherkin 語法了。

閱讀更多

理解 composer.json 的 replace

通常你在 composer.json 裡很少會用到 replace 這個 schema 屬性 ,不過在以下情境它就很有用了。

例如你正在開發一個專案 (也就是在 composer.json 中的 typeproject ) ,它相依 original/library 這個套件以及 other/package 這個套件。很巧的是, other/package 這個套件也相依了 original/library 這個套件。

假設現在你覺得 orginal/library 這個可能已經太老舊,但維護者又不想讓你更動它,所以你決定把它 fork 出來改成一個相容但是功能更強大的 better/library ,並且把它標上新版號釋出。

現在回到你的專案,將原來的 original/library 改成 better/library ,並希望一切正常;只是 other/package 還相依在 original/library ,使得它跟你的 better/library 有衝突。那麼該怎麼讓 other/package 也改用 better/library 呢?我們可不打算再 fork 一份 other/package

這時候就是 replace 出場的時機了。

閱讀更多

面對 Legacy Code ,該重構還是重寫?

在程式已經上線很久很久的情況下,公司也找了不少人來維護這些程式碼;而因為開發者來來去去,加上每個人對程式開發的觀念不同,他們也許都有過這樣的感受:

  • 因為缺少規格文件,這團程式碼到底有哪些是該拔還是不該拔,很抖;算了,放著不管吧。
  • 因為迫於時間壓力,被只求解決眼前問題所帶來的不穩定性困擾著;算了,有 bug 再修。
  • 因為沒有寫過測試,修正程式時常常擔心改東壞西的不安全感;算了,有人叫再說。
  • 因為團隊已有慣例,想要動手調整架構,卻怕同事不支持;算了,給下個人弄吧。
  • 因為依賴語言特性,有些好的作法引入之後反而造成問題;算了,反正會動就好。

結果專案中的技術債越欠越多,而這些程式碼也變成了所謂的 legacy code 。

閱讀更多

重構或重寫 Legacy code 的幾個階段

看完前一篇的介紹,我想你應該已經想好面對 legacy code 時,應該要重構還是重寫了。如果你打算對正在線上的程式碼進行重構,那就像在幫飛行中的飛機換引擎一樣;如果是重寫,那就是造一架新飛機讓它升空,然後在空中把舊飛機裡的乘客接過來一樣。

那麼要怎麼在空中幫飛機換引擎或接送乘客呢?應該有些具體的方案吧?其實有幾件事是兩個方法都必須先做的,以下就整理了幾個重構或重寫前重要的步驟。

閱讀更多

測試該驗證結果還是該驗證細節

很多人在寫測試時,常會陷入該去測試結果還是測試細節的困擾裡。雖然我的測試寫得不算太多,但我還是提供一些看法與實務上的經驗供大家參考。

閱讀更多

分析 PHP 程式碼品質

前兩天 Laravel 老爸 Taylor 分享了他對幾個知名的 framework 所做的程式碼品質分析,引起了社群很大的討論

閱讀更多

很值得一看的 Spotify 的工程文化

這是在網路上流傳很久的 Spotify 公司工程文化的介紹,雖然是兩年前的影片,但看完後覺得跟我們公司有很多相似的地方,而且也有值得學習的部份。因此特別把其重點整理並紀錄下來,以供往後組織參考與討論。

閱讀更多

如何才有資格稱為資深工程師

看到這篇推,心中還滿有感觸的。本來就不是資歷混夠久、程式寫得好就能算得上資深工程師;資深工程師該怎麼定義其實很難拿個準,我的主管也曾問過我這個問題,我一時之間也很難完整回答。不過在面試時常常看到很多面試者都是應徵資深工程師,但實際問他們一些問題之後,卻發現他們卻缺乏了一些東西。

所以藉這個機會,我想從幾個面向來聊聊我心目中的工程師應該具備哪些特質與能力,而這些特質與能力,我都是從身邊厲害的同事們與社群的朋友們身上觀察到的,他們都是我所敬重的資深工程師 (當然職稱不一定是) ;同時我也會提供一些過去遇到的反指標,避免大家誤會資深工程師是否都是這樣的人。

閱讀更多

在 PHPUnit 中測試需要 closure 的函式

不知道你有沒有在開發 PHP 程式的過程中,測試過需要使用 anonymous function 或 closure 的函式或類別方法?我在開發自己的函式庫時,就遇到了需要測試 closure 是否被正確調用的問題。

在解決幾個問題後,我發現其實做法並不難,所以接下來我就來介紹幾個測試 closure 的方式。

閱讀更多