大家。我現在正在進行單元測試,而我有一個問題,我無法自己解決。 問題列表如下:C#:我如何實例化私有內部類的列表?
public class A {
private class B{ }
private List<B> list = new List<B>;
}
我想測試list[i]
是否null
與否?現在我可以使用Reflection來獲取列表,但問題是如何將B
的實例添加到列表中? 感謝您的幫助!
大家。我現在正在進行單元測試,而我有一個問題,我無法自己解決。 問題列表如下:C#:我如何實例化私有內部類的列表?
public class A {
private class B{ }
private List<B> list = new List<B>;
}
我想測試list[i]
是否null
與否?現在我可以使用Reflection來獲取列表,但問題是如何將B
的實例添加到列表中? 感謝您的幫助!
一般來說,只是測試這段代碼是沒有生產力的。 雖然我不同意你得到的另一個答案:不測試私人,測試應該是有意義的行爲。
當然,您可以爲每個成員編寫單元測試,使得重構任何類型的主要PIB。這會產生效果嗎?不是真的。
但是,對於它的價值,你只需要多一點反思魔術瞧:
[TestMethod]
public void PrivateListCanHaveObjectsAdded()
{
var target = new A();
var b = typeof(A).GetNestedType("B", BindingFlags.NonPublic);
var list = typeof(A).GetField("list", BindingFlags.Instance | BindingFlags.NonPublic);
var bInstance = Activator.CreateInstance(b);
var addMethod = typeof(List<>).MakeGenericType(b).GetMethod("Add");
var countProperty = typeof(List<>).MakeGenericType(b).GetProperty("Count");
addMethod.Invoke(list.GetValue(target), new object[] { bInstance });
Assert.AreEqual(1, countProperty.GetValue(list.GetValue(target)));
}
單元測試旨在測試......單元。它們並不意味着要測試程序的內部工作方式。它們旨在測試面向你的類的API的public
。
如果您的課程的公共方法有效,那麼您知道任何private
機制也可以工作。如果private
機制中斷,它們將導致公共方法停止工作。
這不是你的工作,以測試C#編譯器。這個列表永遠不會在運行時可訪問的範圍內爲空。請顯示您的實際問題的代表性示例。 – CodeCaster