【发布时间】:2013-05-14 01:46:31
【问题描述】:
这个问题的背景太详细了,无法在此处描述,并且可能会对回答产生不利影响,因此我不包括在内。我想在单元测试中断言有关方法的某些事情。其中一些事情可以使用反射来实现,例如try/finally块的格式、类字段和方法局部变量等。我已经知道类型和方法签名。
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:microsoft.com/en-us/download/details.aspx?id=34685
标签: c# .net reflection code-analysis codedom