這個問題的背景太複雜了,無法在這裏描述,並且可能會對響應產生不利影響,所以我不包括它。我想在單元測試中斷言某個方法的某些事情。其中一些東西可以使用反射,例如try/finally
塊的格式,類字段和方法局部變量等。我已經知道類型和方法簽名。使用Reflection和CodeDom進行方法分析
protected override void OnTest()
{
bool result = false;
SomeCOMObject com = null; // System.__ComObject
try
{
}
finally
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(com);
}
return (result);
}
我一直沒能實現的東西,如:
- 該方法是否只包含一個
return (result);
聲明,以及是否該聲明是在函數中的最後一個。 System.__ComObject
類型的所有變量是否已在finally
塊中使用System.Runtime.InteropServices.Marshal.ReleaseComObject(object)
進行手動取消參考。
由於其中有些東西不可能使用反射,而且源代碼的文本分析還不夠理想,所以我轉向CodeDom,但一直未能掌握它。我被告知從源代碼創建表達式樹是不可能的。也不可能從運行時類型創建表達式樹。如果這是正確的,我如何利用CodeDom來實現上面列表中的內容?
我在過去使用過CodeDom進行代碼生成並將簡單的代碼類編譯爲程序集。但我不知道如何用它來分析方法的內部。請指教。
您可能想要調查Roslyn CTP:http://www.microsoft.com/en-us/download/details.aspx?id=34685 – dlev 2013-05-13 17:28:08