Ich habe den Gerätetest für einige Zeit vernachlässigt. Ich habe Unit-Tests geschrieben, aber sie waren ziemlich schlecht. Ich lese gerade durch "The Art of Unit Testing", um mich selbst auf den neuesten Stand zu bringen.Gerätetest mit zwei Funktionen
Wenn ich eine Schnittstelle haben, wie:
public interface INotificationService
{
void AddError(string _error);
void AddIssue(string _issue);
IEnumerable<string> FetchErrors();
IEnumerable<string> FetchIssues();
}
Eine konkrete Implementierung dieser Schnittstelle enthält:
private readonly ICollection<Message> messages;
Hinzufügen eines Fehler oder Problem erstellt eine neue Nachricht mit einem Enum seiner Art bezeichnet und fügt es der Sammlung hinzu. Der Aufruf von FetchErrors()/FetchIssues() gibt Nachrichten dieses Typs aus der Auflistung zurück.
Würde der folgende Test gültig ?:
[Test]
public void FetchErrors_LoggingEnabledAddErrorFetchErrors_ReturnsError()
{
notificationService = new NotificationService();
notificationService.AddError("A new error");
Assert.AreEqual(new []{"A new error"}, notificationService.FetchErrors());
}
Meine Sorge ist, dass ich zum ersten Mal AddError() ich anrufen, dann das Ergebnis der Prüfung FetchErrors(). Also rufe ich zwei Funktionen an. Ist das falsch?
Sollte ich die Sammlung öffentlich machen und direkt bestätigen, dass sie eine Nachricht des entsprechenden Typs enthält, die die protokollierte Fehlermeldung enthält?
Was wäre die beste Vorgehensweise in diesem Szenario?
Hallo StuartLC, danke für die Antwort. Der Grund dafür ist, dass er in Roy Osheroves Buch vorschlägt, Dinge wie das Instantiieren einer neuen Instanz einer getesteten Klasse zu tun, aber die privaten Mitglieder öffentlich zu machen, um das Testen einzelner Funktionen zu erleichtern. Ich war mir nicht sicher, wie weit ich das in Bezug auf das Beispiel in meinem OP angehen sollte. –