2010-06-28 46 views
2

有兩種測試場景我不清楚。它們都是第一眼看到的,以創建非常脆弱的測試。單元測試接口和方法調用

首先,當應一個單元測試接口(即驗證的接口具有一組簽名)?

其次,當應在「測試序列圖」(我只是做了一個學期) - 這意味着驗證的電話是在合適的對象進行的?

+0

哪種語言? – skaffman 2010-06-28 21:13:44

+0

請確定你所說的意思是「當」(或答案是「總是) – Almad 2010-06-28 21:14:51

+1

語言是C#,@Almad - 如果答案是永遠,請證明這樣的測試帶來給出,他們將與接口或對象打破值模型的變化是否是可取的 – Ben 2010-06-28 21:28:13

回答

2

測試接口意味着你應該只測試對象有哪些公共接口上的成員。換句話說,不要測試私人東西。以被測單位作爲黑盒子。這使得測試更易於維護,因爲您可以在不中斷測試的情況下更改實施細節。測試也會表達你的被測試單元是有益的,而不是它是如何實現的。

對其他對象所做的測試調用稱爲「交互測試」(不要與集成測試混淆,其中不要混淆其他對象)。當被測單元調用另一個對象而不依賴於它的方法時,需要進行交互測試。我試着用一個例子來解釋它。

以下方法需要進行測試:

public decimal CalculateTax(Order order); 

讓我們假設,這種方法需要調用

TaxRules TaxRuleProvider.GetRules(Country country) 

返回一些地方的規則。當它沒有調用它時,它將不能返回正確的結果。它將錯過重要的信息。你不需要測試它是否被調用,只需測試結果。

另一種方法:

public void StoreThingy(Thingy toBeStored); 

它將調用

public void NotificationBroker.NotifyChanges(SomeChanges x); 

StoreThingy不依賴於該通知。如果它發送通知,你不能決定它的接口。你需要通過交互測試來測試。

通常用於交互測試的方法返回void。在這個類別中有各種各樣的事件和通知和方法,如Commit()

+0

偉大的答案。我不是「互動測試」明確,謝謝。請澄清你的行頭「你不應該測試,如果接口齊全「 – Ben 2010-06-28 21:33:06

+0

@Ben:」如果界面是完整的「就是我如何理解你的問題,」驗證一個界面是否有設置的簽名「,我誤解了嗎? – 2010-06-28 21:35:52

+0

@Stefan - 哦,我現在明白了,我在誤讀這條線(我因爲某種原因在「你不應該測試」之後在精神上插入了一個逗號)。 – Ben 2010-06-28 21:43:28