avatar
Articles
66
Tags
43
Categories
6

Mobius
Testing Laravel - 測試 Controller
Created2021-07-08|Testing Laravel|Test•PHP•Laravel•Controller
Testing Laravel - 測試 Controller本文章使用的開發環境為PHP : 8.0.8Laravel : 8.51.0 在 Laravel 的開發過程中我們想要對 response 寫測試的時候,比較常見的是使用官方 HTTP Tests 章節內提到對於 api 回傳的 json 去做驗證 但我們也很常遇到前後端沒有拆分的那麼乾淨的專案,這樣的專案會使用 SSR(Server Side Render) 形式去回傳 response ,這時候我們通常會在 laravel 的 controller 回傳一個 view 然後夾帶一些需要使用的參數 假設我們今天的 web.php 有一個 route web.php 1Route::get('demo_controller_test', DemoTestController::class); 對應到我們的 DemoTestController DemoTestController 12345678910111213class DemoTestController extends Controller& ...
金魚腦記不住想要 ssh 的 ip ?
Created2021-06-25|日常開發筆記|SSH
金魚腦記不住想要 ssh 的 ip ?筆者開發的情境時常會需要去連線不同的主機,所以必須要去記憶很多組主機的 ip ,這樣在使用 ssh 的時候才有辦法知道要連線的目標,但是 ip 實在是太難記憶了 這時候我們可以透過設定 ssh config 來減輕我們腦袋的負擔 12cd ~/.sshvim config 我們可以新增設定的形式 config 1234Host devHostname 127.0.0.1identityfile ~/.ssh/id_rsaUser mobius Host:你想要設定的主機名稱 Hostname: ip identityfile: 連線主機用的 key 存放位置 User: 用來登入的 user name 如果想要設定多組的話就是往下持續遞增這樣的區塊就可以了 config 123456789Host devHostname 127.0.0.1identityfile ~/.ssh/id_rsaUser mobiusHost productionHostname 123.123.123.123identityfile ~/.ssh/id_rsa ...
單元測試的藝術 - Ch8 好的單元測試的支柱 - Sec. 8.2 撰寫可維護的測試
Created2021-06-13|讀書會報告|讀書會報告•Test•Unit Test
單元測試的藝術 - Ch8 好的單元測試的支柱 - Sec. 8.2 撰寫可維護的測試隨著時間推移,測試會變得難以理解及維護,所以可維護性是大多數開發人員撰寫單元測試的核心問題之一。 8.2.1 測試私有或保護的方法在測試時,你應該只考慮公開契約(整體功能),因爲私有方法不會獨立存在,他必定會被某個公開方法或是私有方法呼叫,也就是說,任何私有方法通常都是更大的工作單元的使用案例的一部分。 如果一個私有方法值得被測試,那他也許應該是公開的、靜態的,或是至少是內部的( internal ),或者應該將它獨立到另一個類別中。 讓方法變成公開方法如果你覺得某個私有方法具有被測試的價值,那可能表示這個方法對於呼叫端來說有某種已知的行為或契約的效用,將這個方法改成公開的,代表正式將契約對外開放 把方法抽取到新類別中如果一個方法中包含了很多獨立職責的邏輯,或是類別的某些狀態只和這個方法有關,把這個方法抽取到另外一個具有特定功能的類別會更好,也符合單一職責原則。 把方法改成靜態方法如果一個方法沒有用到執行物件的任何變數跟狀態,那你可以考慮把它改為靜態方法,同時這也表示了這個方法為某種輔助方法。 把方法 ...
金魚腦記不住團隊 git 規範? 那就用 git template 吧
Created2021-05-20|Git|Git
金魚腦記不住團隊 git 規範? 那就用 git template 吧常常我們在進行團隊協作開發的時候都需要遵循一定的 git commit 規範,而規範通常不是那麼容易被記住,這時候如果在 commit 的時候有人可以提醒我關於規範的大小事就好了 git template 正好可以拿來做這樣的事情,以下稍微介紹一下。 這邊假設我們的 commit 規範是使用 Angular Commit Guidelines 來做範例 多人協作下免不了的是我們必須要將 git commit 去做分類,已達到管理的目的,但你看看像是 Angular Commit Guidelines 的規範光是他的 commit type 就有非常多種 build: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm) ci: Changes to our CI configuration files and scripts (example scopes: Travi ...
單元測試的藝術 - Ch6 深入瞭解隔離框架 - Sec. 6.3 ~ 6.5
Created2021-05-09|讀書會報告|讀書會報告•Test•Unit Test
單元測試的藝術 - Ch6 深入瞭解隔離框架 - Sec. 6.3 ~ 6.56.3 支援適應未來和可用性的功能一個好的測試框架會提供一些讓你可以因應未來變化的一些功能,如: 遞迴假物件 對行為和驗證忽略預設參數 非嚴格驗證與行為 大範圍偽造 6.3.1 遞迴假物件遞迴假物件是在函數回傳其他物件時的一種特殊行為,這些回傳物件會自動產生假物件。 Humanable.php 1234interface Humanable{ public function generatePerson(): Humanable;} Person.php 123456class Person implements Humanable{ public function generatePerson(): Humanable { }} Test 123456789101112131415161718192021222324/** * @test */public function GeneratePerson(){ ...
Laravel Helper - Str::limit() 在中文應用場景的大小事
Created2021-04-22|Laravel|PHP•Laravel•Laravel Helper
Laravel Helper - Str::limit() 在中文應用場景的大小事最近在開發上遇到了要擷取中文訊息內容預覽的問題,例如今天我有一個句子 萊布尼茨和牛頓都被普遍認為是獨立的微積分發明者。牛頓最先將微積分應用到普通物理當中,而萊布尼茨創作了不少今天在微積分所使用的符號。牛頓、萊布尼茨都給出了微分、積分的基本規則,二階與更高階導數,近似多項式級數的記法等。在牛頓的時代,微積分基本定理是已知的事實。 擷取自 微積分 wiki 這很可能是某個文章的內容,而我在顯示頁面上的預覽只有要顯示部分的文字,例如前十個字好了,而且我想讓被隱藏的文字用「…」代替,我想顯示的內容大概如下 萊布尼茨和牛頓都被普… 這時候我們就需要用到 Laraevl Helper 裡面幫我們預先寫好的字串處理函式了 我們要使用的是 Str::limit() 這個函式,它可以幫助我們擷取某個字串的前幾個字,並且可以自定義超過字數之後的結尾 Str::limit先來看看官網的例子 12345use Illuminate\Support\Str;$truncated = Str::limit('The ...
單元測試的藝術 - Ch5 隔離框架 - Sec. 5.4 ~ 5.7
Created2021-04-10|讀書會報告|讀書會報告•Test•Unit Test
單元測試的藝術 - Ch5 隔離框架 - Sec. 5.4 ~ 5.7 5.4 測試事件相關的活動事件是雙向的,所以可以從兩個方面去進行測試 測試監聽事件的那一方 測試觸發事件的那一方 測試事件監聽者我們想檢查一個物件是否有註冊到另一個物件的事件 如果物件被註冊到另外一個物件,我們比較直覺的會想到去檢查物件內部狀態使否有該物件被註冊,但作者認為這是比較不好的方式 比較好的選擇是,檢查監聽物件是否對於發生的事件做出某種反應 1234567891011121314151617181920212223242526272829303132333435class Presenter{ private readonly IView _view; public Presenter(IView view) { _view = view; this._view.Loaded += OnLoaded; //註冊事件(OnLoaded) } private void OnLoaded() & ...
Working Effectively with Legacy Code - Ch25 - 解依賴技術 (6)
Created2021-03-27|讀書會報告|讀書會報告•Test•Refactoring•Legacy Code
Working Effectively with Legacy Code - Ch25 - 解依賴技術 (6)21. 子類別化並覆寫方法「子類別化並覆寫方法」是物件導向程式中姐依賴的核心技術,這個手法就是讓我們可以在測試環境下,利用繼承將我們不關心的行為架空,或是覆寫你在乎的行為讓他可以達到感測的目的,事實上這本書中其他的很多手法都是這個手法的變形。 before上有許多方法,假設我們今天要加入測試的方法是 ```sendMessage()``` ,而他的過程中會呼叫一個私有方法 ```createForwardMessage()``` 去生成一個新的訊息,但過程中用到了 ```Session``` 物件,可是測試過程我們沒辦法對真正的 ```Session``` 去做操作。123456789101112131415161718192021222324252627282930313233343536373839**MessageForwarder**```php=class MessageForwarder{ public function sendMessage() ...
Working Effectively with Legacy Code - Ch25 - 解依賴技術 (5)
Created2021-03-12|讀書會報告|讀書會報告•Test•Refactoring•Legacy Code
Working Effectively with Legacy Code - Ch25 - 解依賴技術 (5)17. 特性提升有時候我想為類別中的某些方法加入測試,但我在測試中必須要構築的依賴卻又跟我想測試的方法毫無關聯,這樣我勢必得花上大量的成本去對付這些依賴,而這樣做對測試目標的方法毫無幫助。 當然,這個時候我們可以透過「暴露靜態方法」或是「分解出方法物件」去應對,本節介紹另外一個可以嘗試的方法 before我們有一個 Scheduler 類別,我們想要修改 getDeadTime() ,但不關心 updateScheduleItem() ,而 updateScheduleItem() 的實作就是伴隨著某些麻煩的依賴,與 getDeadTime() 的實作完全沒有關聯 Scheduler 123456789101112131415161718192021222324252627282930313233343536373839404142434445class Scheduler{ /** * @var array */ private $ite ...
Working Effectively with Legacy Code - Ch25 - 解依賴技術 (4)
Created2021-03-03|讀書會報告|讀書會報告•Test•Refactoring•Legacy Code
Working Effectively with Legacy Code - Ch25 - 解依賴技術 (4)13. 連接替換在物件導向的語言中有很多方法可以讓我們去替換物件,例如讓偽造的類別去實作與要替換的類別同一個物件,或是去繼承相同的基底類別,但在像是 C 這樣的程序式語言裡面卻沒辦法這麼做。 before例如下面這個函數,如果不用預處理手段,就完全沒辦法在編譯期將其替換為另一個函數 1void account_deposit(int amount) after我們可以使用 連接替換(Link Subsitution) 來將他替換為另外一個函數。 首先要建立一個 啞元函式庫(dummy library) ,裡面放的假造函式簽章必須要跟原來的函式相同,並在偽造的函式內撰寫你用來感測的內容 12345678void account_deposit(int amount) { struct Call *call = (struct Call *)calloc(1, sizeof (struct Cal)); call->type = ACC_DEPOSIT; c ...
1234…7
avatar
Mobius Wu
Laziness, Impatience and Hubris
Articles
66
Tags
43
Categories
6
My Github
Categories
  • Git1
  • Laravel7
  • PHP4
  • Testing Laravel2
  • 日常開發筆記5
  • 讀書會報告47
Tags
Job Design Pattern Test Pipeline Design Patterns Laravel Helper WTF PHP Artisan CI/CD ATDD Command Query Notification Refactoring Controller Coding Style 大話 AWS 雲端架構 Crontab Behavioral Patterns 提升程式設計師的面試力 Unit Test Blog Structural Patterns PSR SQL 資料結構 BDD Clean Architecture Laravel 讀書會報告 Schedule API AWS Creational Patterns PHP SOLID SSH Git Queue Legacy Code
Archives
  • July 20231
  • April 20231
  • February 20231
  • November 20221
  • October 20221
  • September 20222
  • August 20221
  • July 20221
©2023 By Mobius Wu
Framework Hexo|Theme Butterfly