[英]Mock a Property Getter Throw an Exception Using Reflection
我想模擬一個我使用反射發現的屬性,當有人嘗試從中獲取異常時,該異常引發異常。 問題是我不知道ID
的類型。 以下是我嘗試過的示例:
internal static T CreateObjectWithExceptioningIDProperty<T>() where T : class
{
Type type = typeof(T);
var moq = new Mock<T>();
var lambdaParameter = Expression.Parameter(type);
PropertyInfo idProperty = type.GetProperties().First(pi => pi.Name.Equals("ID"));
var lambdaBody = Expression.Property(lambdaParameter, idProperty);
dynamic func = Expression.Lambda(lambdaBody, lambdaParameter);
moq.Setup(func).Throws(new Exception()); // get RuntimeBinderException
return moq.Object;
}
當前,我得到一個RuntimeBinderException: 'object' does not contain a definition for 'Throws'
。 我究竟做錯了什么?
這類似於Moq和Reflection,將動態生成的表達式樹/ lambda傳遞給moq並使用Reflection創建Expression <Func <,>> 。
如果將Setup
的結果IThrows
為IThrows
,它將起作用。 我不知道為什么它失敗了。 可能是因為moq.Setup(func)
的運行時類型通常是不可見的(它在Moq
internal
)。
((IThrows)moq.Setup(func)).Throws(new Exception());
也許
moq.Setup( x => x.Id).Throws(new Exception());
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.