假設我已經決定用C或任何其他過程編程語言編寫一個大型應用程序。它有呼叫的依賴性看起來像這樣的功能:程序編程的依賴注入
A
|
+-------------+
| |
B1 B2
| |
+------+ +------+
| | | |
C11 C12 C21 C22
顯然,單元測試葉功能,C11,C12,C21和C22非常簡單:設置輸入,調用功能,斷言輸出。
但是,爲B1,B2和A啓用良好單元測試的正確策略是什麼?
會Dependency Injection建議B1
(和B2
也)被宣佈爲跟隨?
// Declare B1 with dependency injection for invoking C11 and C12.
int B1(int input, int (*c11)(int), int(*c12)(int));
但是,如果我有很多層次的調用,該策略看起來不可擴展。試想一下A
的聲明是什麼樣的:
int A(int input, int (*b1)(int, int (*)(int), int(*)(int)),
int(*b2)(int, int (*)(int), int(*)(int)),
int (*c11)(int),
int (*c12)(int),
int (*c21)(int),
int (*c22)(int));
Yuck!一定有更好的方法。
有時候,我覺得DI和其他旨在提升模塊性和維護簡便性的類似模式實際上會妨礙代碼的清晰性,並且使應將簡單的編碼變爲無意義的抽象和複雜的間接代碼變得複雜。
C中的大型軟件項目(如Perl和Ruby)如何處理單元測試?
這是一個有趣的想法。我將不得不嘗試。 – kirakun 2011-04-14 17:32:58
你也可以用C編寫面向對象程序,而不僅僅是程序。只需聲明一個帶有數據成員和函數的結構,將結構作爲第一個參數(僞指針)。在c文件中實現,你已經創建了一個僞類。多態性和這樣的事情是可能的,只是複雜的;) – sanosdole 2011-04-14 21:00:03