Library Kata “INotifyPropertyChanged Tester”

 

Implementiere eine Bibliothek, mit der überprüft werden kann, ob eine Klasse das Interface INotifyPropertyChanged korrekt implementiert.

Das Interface INotifyPropertyChanged wird beim Data Binding verwendet. Durch den PropertyChanged Event wird den Subscribern mitgeteilt, dass sich eine Eigenschaft des Objekts geändert hat. Daraufhin können dann beispielsweise Bildschirmelemente aktualisiert werden.

Ein automatisierter Test für eine Eigenschaft sieht üblicherweise wie folgt aus:

[Test]
public void Name_Property_löst_PropertyChanged_Event_korrekt_aus() {
    var kunde = new Kunde();
    var count = 0;
    kunde.PropertyChanged += (o, e) => {
        count++;
        Assert.That(e.PropertyName, Is.EqualTo("Name"));
    };

    kunde.Name = "Stefan";

    Assert.That(count,Is.EqualTo(1));
}

Diesen Test für jede Eigenschaft einer Klasse zu erstellen, ist sehr viel Aufwand, der in keinem guten Verhältnis zum Nutzen steht. Mit Hilfe der zu implementierenden Bibliothek soll der Test wie folgt aussehen:

[Test]
public void Properties_lösen_PropertyChanged_Event_korrekt_aus() {
   NotificationTester.Verify<Kunde>();
}

Der Typ der zu testenden Klasse wird als generischer Methodenparameter an die Verify Methode übergeben. Diese instanziert daraufhin ein Objekt des Typs und ermittelt per Reflection alle Eigenschaften, für die der PropertyChanged Event implementiert werden muss. Anschließend werden alle Eigenschaften daraufhin überprüft, ob sie den Event auslösen und ob dabei der Name der Eigenschaft korrekt übergeben wird.