0

摘要:在使用Fluent聲明編寫單元測試時,遇到了幾個我在下面詳細描述的問題。如果您需要我提供任何其他信息,請告訴我,但我不確定這是否確實是預期的行爲,或者我誤解了某些內容。ShouldBeEquivalentTo導致對象引用未設置ExcludeMissingProperties的異常/定義

問題1是一個對象引用未設置爲我正在觀察的實例異常。問題2與ExcludeMissingProperties的定義方式相比似乎是意想不到的行爲。

對於我下面的問題,我使用下面的示例類來幫助演示我正在談論的問題。

public class B 
    { 
     public string Name { get; set; } 

     public int Id { get; set; } 
    } 

internal class BTo 
    { 
     internal int Id { get; set; } 

    } 

public class C 
    { 
     public int ID { get; set; } 
     public B B { get; set; } 
    } 

問題1:對象沒有設置到一個實例異常時,期望不具有複雜的類型屬性集。

a。如果期望的對象(期望)沒有設置複雜的類型屬性,並且實際的(主題)確實,則對象引用未設置爲拋出實例錯誤。這對於簡單對象可能沒有問題,但在DTO嵌套嚴重的實際測試場景中,很難找到導致異常的原因。

b。與此異常相關的是,如果我們可以拋出導致異常的屬性名稱,它將非常有用。我知道這是一個未處理的情況。

樣品測試:

var expected = new C 
       { 
        ID = 1, 
       }; 
var actual = new C 
       { 
        ID = 1, 
        B = new B 
         { 
          Id = 1, 
          Name = "name" 
         } 
       }; 
actual.ShouldBeEquivalentTo(expected, expr => expr.ExcludingMissingProperties()); 

問題2:ExcludingMissingProperties 的定義,我不得不寫很多代碼來解決默認行爲。

對於我的很多測試用例,我不想設置期望屬性;例如:數據庫插入的情況下,我想檢查一個主鍵是否生成(所以值不應該默認是一個足夠的情況),但我不在乎什麼值。同樣,還有其他噪音屬性與我的測試用例無關。

所以這個失敗:

var expected = new B { Name = "somevalue"}; 
var actual = new B { Id = 1, Name = "somevalue" }; 

actual.ShouldBeEquivalentTo(expected, x => x.ExcludingMissingProperties()); 

這傳遞:

var expected = new BTo { Id = 1}; 
var actual = new B { Id = 1, Name = "somevalue" }; 

actual.ShouldBeEquivalentTo(expected, e => e.ExcludingMissingProperties()); 

回答

0

1期已經在即將到來的3.0版已經解決了(現在處於alpha),並造成由一個null對象。
問題2可以通過使用Excluding方法使用指向要排除的屬性的屬性路徑表達式來解決。如果不能使用該表達式,則也可以使用Excluding的重載作爲Func<ISubjectInfo, bool>

+0

我的答案解決了您的問題嗎? –

相關問題