2017-03-09 82 views
2

我使用C#,xUnit和Moq進行單元測試。我有一個具有複雜類型屬性的對象。 「清」的性質和它的所有屬性,我這樣做:如何測試已創建對象的新實例?

this.ComplexTypeInstance = new ComplexType(); 

現在我想要斷言ComplexTypeInstance已被分配到一個全新的對象。我的第一個想法是將ComplexTypeInstance與新的ComplexType()進行比較,看它們是否相等。但要做這樣的事情,我想我必須重寫equals運算符。有什麼方法可以輕鬆檢查所有屬性是否設置爲默認值?或者有沒有辦法斷言我已經發現了這個對象?

回答

6

或者有沒有辦法斷言我已經發現了這個對象?

只需使用ReferenceEquals比較舊版本和新版本之間的引用。如果他們不同,那麼該房產已被替換。

var origInstance = this.ComplexInstance; 
... // Some operation 
Assert.False(object.ReferenceEquals(this.ComplexInstance, origInstance)); 
0

想着這一點後,有幾個不同的方案,我想出了更容易測試:

  1. 裹在工廠排序方法的ComplexType。我不喜歡這個B/C,它只是意味着要創建一個課程,我想避免擁有這樣一個簡單的工廠。

  2. 提取和覆蓋 - 創建一個虛擬方法,允許我刪除具體的依賴項。如果您有任何問題,請點擊Google「提取並覆蓋」。如果你不知道這種看起來很奇怪的技術,我不喜歡這種B/C。

  3. 注入一個返回對象的新實例的匿名函數。

  4. 一位同事提到我也可以使用Mark Seeman的SemanticComparison將我的屬性與新對象進行比較。

我結束了第三個選項去,將其注入通過構造,雖然我的IOC容器不能輕易解決這個問題,我不得不花了幾分鐘的努力得到它,解決它的綁定。但我的工作很好。也許我應該創建工廠。但我很高興從課堂上拿掉了依賴。起初我不想看起來那麼簡單。