0
我有這樣一個類:存根在一個基類一個只讀屬性
public class Customer : CustomerBase
{
// internals are visible to test
internal string GenString()
{
// this actually composes a number of different properties
// from the parent, child and system properties
return this.InfoProperty.Name + DateTime.Now.ToString() + "something else";
}
}
// this class is in a 3rd party library, but from metadata it looks like this
public class CustomerBase
{
public Info InfoProperty { get; }
}
我的測試看起來是這樣的:
public class Tests
{
public void MyTest()
{
using (ShimsContext.Create())
{
// Arrange
/* I shim datetime etc. static calls */
Fakes.StubCustomer c = new Fakes.StubCustomer()
{
InfoProperty = new Info("Name") // <- Error here because it's readonly
};
// Act
string result = c.GenString();
// Assert
Assert.AreEqual(result, "whatnot");
}
}
}
所以我的問題是,我怎麼能存根/勻場處理只讀屬性,以便我可以測試這個函數?
的幾點思考所描述的
Introduce Instance Delegator
模式 - 我會重新考慮宣佈私有成員內部進行單元測試更加簡單,如果這是實際這裏的情況。你可以使用反射來實現它。第二,你爲什麼要存根?我的意思是,如果你已經僞裝了DateTime和InfoProperty,爲什麼不直接讓事物串聯呢? –您可以使用反射來避開訪問修飾符('private'),但這不是可取的。該屬性* readonly *出於某種原因(可能是派生值)。你應該找到一種間接設置它的方法(在構造函數中?通過2或3個其他方法?)。 – pid
@KeithPayne:這是我想測試的一個合法的內部,所以這不是一個擔心。問題是,存根InfoProperty(如示例中所示)不起作用。 –