この質問の内容は複雑すぎてここで説明できず、回答に悪影響を与える可能性があるため、含めません。単体テストのメソッドについて特定のことを主張したい。これらのいくつかは、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
使用して手動で逆参照されているかどうか。System.Runtime.InteropServices.Marshal.ReleaseComObject(object)
finally
これらのいくつかはリフレクションでは不可能であり、ソース コードのテキスト分析は理想からかけ離れているため、CodeDom に目を向けましたが、それを把握することはできませんでした。ソース コードから式ツリーを作成することはできないと言われました。また、ランタイム型から式ツリーを作成することもできません。それが正しい場合、CodeDom を活用して上記のリストを達成するにはどうすればよいですか?
私は以前、コード生成と単純なコード クラスのアセンブリへのコンパイルに CodeDom を使用しました。しかし、メソッドの内部を分析するためにどのように使用できるかわかりません。お知らせ下さい。