簡體   English   中英

模擬屬性獲取器使用反射引發異常

[英]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的結果IThrowsIThrows ,它將起作用。 我不知道為什么它失敗了。 可能是因為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM