摘要:在使用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());
我的答案解決了您的問題嗎? –