2009-02-02 84 views
0

好吧,嘗試我的第一次TDD嘗試,現在是時候反映一下 並得到一些指導,因爲它不是我成功。 該解決方案部分採用現有框架製作,可能使得TDD不太理想。似乎給我最大的問題是視圖和控制器之間的交互。我會 舉幾個簡單的例子,並希望有人會告訴我什麼我 可以做得更好的錯誤。用戶界面和TDD babysteps

每個視圖的接口從基站接口繼承,與這些 構件(有更多):

公共接口IVIEW
{
空隙ShowField(串fieldId)
空隙HideField(串fieldId)
空隙SetFieldVisibility(串fieldId,布爾可見)
空隙DisableField(串fieldId)
空隙ShowValidationError(串fieldId)
...
}

的具體視圖界面,​​隨後將添加成員每個 場這樣 公共接口IMyView:IVIEW
{
字符串名稱{;組; }
string NameFieldID {get; }
...
}

您怎麼看待這個問題?從一個通用接口繼承一個 好的或壞主意? 關於給我帶來麻煩的事情之一是,我第一次使用了 ShowField和HideField,並發現我寧願使用 SetFieldVisiblity。我沒有改變方法的結果,但我不得不更新我的測試,這似乎應該是必要的。有多種方法做同樣的事情,一件壞事?一方面這兩種方法都適用於不同的情況,但它們確實使界面變得混亂,使得界面比其嚴格的界面更加複雜。

沒有通用接口的設計會更好嗎?這將刪除 fieldID,我不是爲什麼,但我認爲fieldID的東西聞起來,我 可能是錯的。 我只會在需要時製作顯示和隱藏方法,即如果 它們將被控制器調用。這將是一個不太通用的 解決方案,在視圖中需要更多的代碼,但控制器代碼 會更簡單一些。

所以一個視圖界面可能是這樣的: 公共接口IMyView
{
無效ShowName()
無效HideName()
字符串名稱{;組; }
int Age {get;組; }
}

+0

您對「現有框架」有何意義?單元測試框架? – 2009-02-02 14:18:01

回答

0

你想測試什麼? Show *將使用戶界面中的小部件可見嗎?做什麼的?

我的建議:不要試圖弄清楚框架是否正常工作。這是浪費時間。開發框架的人應該已經這樣做了,所以你正在複製他們的工作。

通常,你想知道你的代碼是否正確。所以如果你想知道你是否在調用正確的方法,請創建模型:

public class SomeFrameworkMockup extends SomeFramework { 
    public boolean wasCalled; 
    public void methodToTest() { 
     wasCalled = true; 
    } 
} 

使用模型構建UI。

要測試的第二件事是您的算法是否工作。要做到這一點,請將它們隔離在簡單的幫助對象中,您可以輕鬆地使用所有方法並使用各種輸入來測試它們。

在測試過程中避免外部框架。它只會讓你感到困惑。當您構建了一個工作產品時,請使用鼠標進行測試。如果您發現任何問題,請到其根目錄,然後纔開始針對框架編寫測試,以確保此錯誤不再出現。但90%的時間,這些錯誤也會出現在你的代碼中。

0

此刻我並沒有真正看到通用接口的附加價值。

我認爲更好的解決方案是在控制器類上有一些屬性:IsControlXYZVisible。然後,您可以將控件的可見屬性數據綁定到此屬性。

而你的單元測試將測試IsControlXYZVisible的值,這將更容易實現。

我也不明白你爲什麼說你對TDD有不好的經歷。我認爲你的應用架構需要更多的工作。

0

你的問題是有點晦澀但對我來說本身要求的鏈接標題:

The Humble Dialog box

而當你問,如果它(壞有兩個功能做同樣的事情,我說「是的,這很糟糕」 如果一個人打電話給另一個人,那麼有兩個功能有什麼意義? 如果不是,你有一個代碼重複,那就是當你更新一個而不是另一個時等待發芽的錯誤

事實上,有一個有效的案例,你有兩個近似身份l函數:一個檢查其參數,一個不是,但通常只有一個是公共的,而另一個是私人的...