簡體   English   中英

WCF響應對域對象的單元測試轉換

[英]Unit testing translation of WCF response to domain object

從WCF服務中,我們獲得了一個復雜的退出響應,其中包含多個嵌套列表和許多屬性(最多5級)。 此響應不是一對一可用的,因此我們構建了將其“翻譯”為可在UI中使用的域對象的轉換器。

我們希望對翻譯過程進行單元測試,因此我們知道字段之間沒有錯誤映射。 目前在我的單元測試中,我正在構建代碼中的響應。 但是這已經放棄了一些工作,特別是當我需要在不同的響應中使用一些變體來測試不同的流程時。 同樣,單元測試也變得非常大。 (只建立一個響應可以超過200行)

我一直在想一種方法,可以更輕松地建立響應並使我的單元測試看起來更干凈。

我一直在考慮的一個選項是為每個unittest創建一個帶有所需響應的XML文件,將其反序列化為響應並在反序列化對象上進行單元測試。

這種方法的專家是單元測試將變得更小,更容易創建。 但是更新文件/元素將更加困難。 或者至少這就是我的想法。

任何人都有一些想法或不同的選擇,使這個響應建設更容易?

您可以使用AutoFixture等框架來幫助您創建響應的實例。 AutoFixture將自動設置屬性,從而使您的構造代碼非常短,並且您可以在需要時覆蓋其行為。 例:

var mc = fixture.Build<MyResponseClass>()
   .With(x => x.SomeProperty, "SomeValue")
   .CreateAnonymous();

對於非自定義值,Autofixture使用確定性隨機性來生成值,這可確保您每次都獲得不同的值,但仍將值保持在有效范圍內。

在為請求 - 響應接口編寫測試時,應編寫測試用例,以便每個案例盡可能測試請求中最小的重要部分。 也就是說,每個測試用例應一次測試一個重要的請求元素。

如果遵循此模式,則應該能夠將每個測試用例標識為以下之一:

核心案例

定義從中構造其他測試的“基礎”的情況。 這些總是成功的案例,代表成功的請求。 您可以在單元測試類中定義核心請求,或者如果您有多個核心案例,則從公共基礎構建核心案例。 在任何一種情況下,這些情況都是您在大多數“設置”值的地方。

偏差案例

通過更改一條信息來測試不同的用例,在核心測試用例的基礎上構建一個用例。 通常這些是你的邊緣情況,通常測試預期的失敗(即調用者傳遞不良信息)。

這基本上歸結為DRY ,因為你的核心案例定義了你的測試用例中“常見”的東西,所以你不需要花費200行來設置值。 大多數測試用例輸入應該表示為“與<test case>相同但是帶有<deviation> ”,因此您應該這樣寫。

我認為Lloyd的意思是您將負責構建響應對象的當前代碼帶入一個單獨的* .dll中,因此它只是一個API或庫,您可以在單元測試中調用它。 因此,您的單元測試將變得更加簡單。 這種方法的另一個好處是,您實際上可以構建兩個API:一個構建假對象,另一個構建查詢真實服務的API。 使用界面,您可以通過配置設置輕松切換API。 您也可以嘗試使用像MoQ或smth這樣的模擬框架。 如果它對你的情況有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM