我在單元測試反射說,接口方法在實現類型中是虛擬的,當它們不是?
public bool TestMethodsOf<T, I>()
{
var impl = typeof(T);
var valid = true;
foreach (var iface in impl.GetInterfaces().Where(i => typeof(I).IsAssignableFrom(i)))
{
var members = iface.GetMethods();
foreach (var member in members)
{
Trace.Write("Checking if method " + iface.Name + "." + member.Name + " is virtual...");
var implMember = impl.GetMethod(member.Name, member.GetParameters().Select(c => c.ParameterType).ToArray());
if (!implMember.IsVirtual)
{
Trace.WriteLine(string.Format("FAILED"));
valid = false;
continue;
}
Trace.WriteLine(string.Format("OK"));
}
}
return valid;
}
我通過
Assert.IsTrue(TestMethodsOf<MyView, IMyView>());
我想,以確保所有從接口中的方法聲明爲虛擬調用下面的代碼。原因是因爲我在應用spring.net方面,它只適用於虛擬方法。
我遇到的問題是,implMember.IsVirtual始終是真實的,即使他們不聲明爲所以在聲明類型。
我的TestMethodsOf邏輯有什麼問題?
乾杯
如果我試圖覆蓋聲明類型的方法,我不能這樣做。此外,在這種情況下,繼承方面不重寫我的方法調用,所以沒有檢測到它們作爲虛擬 – 2011-01-25 12:03:03
看到thecoop是更好的答案,爲什麼你不能覆蓋他們... – Massif 2011-01-25 12:06:36