Ich arbeite an einem Analysator für C# -Compiler. Eine meiner Aufgaben besteht darin, sicherzustellen, dass die set
Methode jeder Klasseneigenschaft eine bestimmte Methode in ihre Ausführungskörper aufruft.Überprüfung eines Eigenschaftenausführungskörpers für einen bestimmten Methodenaufruf
nehme ich die folgenden einfachen Klassen haben:
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);
}
}
Angenommen Objektklassendeklaration in myClassTypeSymbol
mit Typ INamedTypeSymbol
gespeichert ist.
ich alle Immobilienobjekte zur Analyse über den Aufruf:
var propertyObjects = myClassTypeSymbol.OfType<IPropertySymbol>();
Nun propertyObjects
enthält Enumeration
mit MyProperty1
und MyProperty2
innen.
Ich iterieren über diese Aufzählung und erhalten set
Methode für jede Eigenschaft.
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?
}
Ist dies für einen Komponententest? –
Ja, es ist für Unit-Test. –
Und darfst du 'SomeClass' ändern? Wenn ja, wäre es ein naheliegender Vorschlag, ein 'PropertyChanged'-Style-Event von' SetPropertyValue() 'zu starten - aber ich könnte mir vorstellen, dass Sie diese Idee bereits erwogen und verworfen haben ... –