2012-08-02 11 views
0

我需要單元測試一個方法,該方法接收MethodInfo某些任意用戶代碼方法(通過反射動態加載)的對象。單元測試接受MethodInfo對象的方法

public string SomeMethod(MethodInfo methodInfo); 

我想鍛鍊使用不同的MethodInfo對象此方法。

最簡單的方法是使用<type>.GetMethod("name")檢索MethodInfo對象,然後使用它調用測試方法並針對結果進行斷言。

我想涵蓋儘可能多的「不同」的方法信息(或更具體地說,儘可能多的不同方法傳入)。

我正考慮2層的方法,不知道這是應該怎麼做:

  1. 與我需要它的所有方法創建一個新的測試類。使用這種類型的GetMethods()並迭代它們以將它們饋送到我測試的方法中。

  2. 爲每個方法創建一個單獨的單元測試。

第一種選擇是容易擴展(添加到測試類的新方法),但包含多個斷言(斷言針對它具有每個MethodInfo的實例)。

我們如何輕鬆解決此問題併爲此特定場景創建穩健的測試?

+0

我想你想過度測試,你只需要測試所有的情況來覆蓋你的整個代碼(包括你的方法中調用的函數生成的異常)。除此之外,對所有不同方法類型的Dummy Class的方法進行迭代,你想測試似乎是一個好方法。 – 2012-08-02 22:27:35

+1

你準確地測試了什麼? MethodInfo是從反射中獲得的。測試的期望是什麼?它堅持什麼? – Ankush 2012-08-02 22:28:19

+0

我們的應用程序動態獲取用戶的方法,將其參數序列化爲xml並顯示它。我想確保無論在我們的應用程序中拋出哪種方法,它都會成功處理並在xml中顯示其參數 – 2012-08-02 22:33:31

回答

1

用我需要的所有方法創建一個新的測試類。使用這種類型的 GetMethods()並迭代它們以將它們饋送到我測試的方法中。

如果SomeMethod邏輯(其處理此MethodInfo的)具有一般邏輯,其與所有類型的MethodInfo的交易,然後上述路線去了。

爲每個方法創建一個單獨的單元測試。

如果SomeMethod中的邏輯對各種類型的MethodInfo有特定的逐個邏輯,則按上述路由進行。

+0

第一個選項的唯一問題是它包含多個斷言。這意味着測試將在第一次斷言失敗時失敗,並且不會顯示所有可能的失敗情況。此外,通過測試名稱(與名稱中包含確切場景的測試相反),很難弄清楚測試名稱有什麼問題。 – 2012-08-02 22:40:53

+0

是的,的確如此。但那不是我的觀點。這是「SomeMethod」的內部實現來控制選擇。 – Ankush 2012-08-02 22:42:47

+0

SomeMethod並不關心您輸入的MethodInfo類型。這是一種支持任何類型對象的通用方法。 – 2012-08-02 22:46:06