私はC#コンパイラ用のアナライザを開発中です。私の仕事の1つは、すべてのクラスプロパティのset
メソッドが特定のメソッドを実行ボディで呼び出していることを確認することです。特定のメソッド呼び出しのためにプロパティ実行ボディをチェックする
は、私は次のような単純なクラスがあるとします。
public class SomeClass
{
public void SetPropertyValue(int propertyValue)
{
// some code here
}
}
public class MyClass : SomeClass
{
public int MyProperty1
{
set => SetPropertyValue(value);
}
public int MyProperty2
{
set => AnotherMethod(value);
}
}
をクラス宣言のオブジェクトがタイプINamedTypeSymbol
とmyClassTypeSymbol
に格納されているとします。
私は呼び出しを介して、分析のためのすべてのプロパティオブジェクトを取得:今すぐ
var propertyObjects = myClassTypeSymbol.OfType<IPropertySymbol>();
、propertyObjects
はMyProperty1
と内部MyProperty2
でEnumeration
が含まれています。
この列挙を繰り返し、すべてのプロパティに対してset
メソッドを取得します。私はドキュメントから理解されるように
foreach (var onePropertyObject in propertyObjects)
{
IMethodSymbol setMethod = onePropertyObject.SetMethod;
// setMethod contains "set" method of a processing property.
// how can I test here,
// that setMethod contains invocation of SetPropertyValue() method?
}
ユニットテスト用ですか? –
はい、単体テスト用です。 –
あなたは 'SomeClass'を変更できますか?もしそうなら、 'SetPropertyValue()'から 'PropertyChanged'スタイルのイベントを発生させることが明らかですが、あなたは既に考えていると思います。 –