希格工作室

2023年8月28日 星期一

UnitTest 比喻與簡易表達

有人問,剛好寫了一個自我感覺良好的回答,所以記錄起來 


如果你有個1+1=2的邏輯
你直接去找db
 
declare @a int = (select 1);
declare @b int = (select 1);
declare @c int= @a + @b ;
return @c



然後你包個method叫做「一加一」
雖然運作很順暢,但基本上就是無法對這個邏輯在程式端做單元測試
因為你依賴的一個不確定的外部因素「資料庫」和「網路」和「你養的貓踢到線」
等問題


所以這個邏輯寫法要改成

取得A(){
var a = db("select 1");
return a;
}
取得B(){
var b = db("select 1");
return b;
}
進行一加一的服務(){
var a = A();
var b = B();
var c = a + b;
return c;
}


這時候到單元測試的專案那邊時候
A和B就是你需要仿造的對象
所以在單元測試這邊改寫成

取得A(){
var a = 1;
return a;
}
取得B(){
var b = 1;
return b;
}



這樣你就可以單純測試「進行一加一的服務()」,而不用擔心因為「你養的貓踢到線」導致測試產生誤差

var c =進行一加一的服務();
test(c == 2);


沒有留言:

張貼留言