Frage

Es scheint außergewöhnlich schweres Hand, sondern von der Regel gehen etwas öffentlich zugänglich soll getestet werden, sollte automatisch implementierte Eigenschaften getestet werden?

Kunden Class

public class Customer
{
    public string EmailAddr { get; set; }
}

Getestet von

[TestClass]
public class CustomerTests : TestClassBase
{
    [TestMethod]
    public void CanSetCustomerEmailAddress()
    {
        //Arrange
        Customer customer = new Customer();

        //Act
        customer.EmailAddr = "foo@bar.com";

        //Assert
        Assert.AreEqual("foo@bar.com", customer.EmailAddr);
    }
}
War es hilfreich?

Lösung

Was passiert, wenn Sie automatisch implementierte Eigenschaften zu etwas ganz anderes wechseln? Der Test nur scheint überflüssig, weil Sie die Implementierung kennen -., Die Sie sollten nicht berücksichtigen, wenn das Schreiben von Tests

Natürlich ist dies abhängig von der Wahrscheinlichkeit, dass Ihr tatsächlich die Implementierung ändert in absehbarer Zeit.

Andere Tipps

Ich halte im Allgemeinen jeden Code, der nicht eine Aktion ausführt Tests werden nicht wert. Dies in der Regel bedeutet, dass ich nicht Testeigenschaften (auto-implementiert oder nicht), weil sie nur setzen oder einen Wert zurück.

Dies wird sich ändern, wenn der Getter oder Setter einer Eigenschaft führt eine Art von „Arbeit“, wie möglicherweise der Rückkehr eines von zwei (oder mehr) Werte basierend auf dem Zustand eines anderen Feld / Objekt / was auch immer.

Wenn Sie es nicht gesehen haben, empfehle ich Roy Osherove des Buch über Unit Testing . Es richtet sich an alle Arten von „was zu testen und wenn“ Art Fragen, einschließlich dieser.

Es hängt davon ab, ob Sie testen, dass eine API-Konformität mit einer erwarteten Menge von Eigenschaften, oder wenn, wie Sie zeigen, sind Sie nur testen Zugriff auf und die Eigenschaften zu setzen.

Im Beispiel gebe ich dir nicht sagen würde.

Update

Konform zu erwarten API; wenn Sie Eigenschaften zugreifst indirekt, etwa in einer Reflexion / dynamische Umgebung, und verwenden Sie Eigenschaften und Methoden Zugang Anrufe eine unbekannte API Konform einen erwartet man überprüfen.

Testing Einstellung und bekommen Eigenschaften sollten im Kontext auftreten Business Funktion des Objekts zu testen. Wenn es Sie keine Business-Funktion die Eigenschaft testen dann entweder nicht die Eigenschaft benötigen, oder Sie weitere Tests benötigen. Ich würde vorschlagen, dass Sie die Eigenschaften hinzufügen, wie Sie die Tests hinzufügen, die sie benötigen, anstatt sie zu addieren, bevor irgendwelche Tests zu schreiben.

Durch das Testen der Business Function Sie behandeln den Code als viel mehr eine Blackbox aus der Perspektive des Unit-Tests. Auf diese Weise können Sie Implementierungsdetails unten mit einem viel kleineren Einfluss auf die Tests wechseln. Wie Umgestalten ist ein wichtiger (und oft übersehen) Stufe des TDD-Zyklus viel weniger Code-Bearbeitung dieses Mittel. Sie können auch erkennen, dass (zum Beispiel) die Eigenschaft soll nicht einen öffentlichen Setter und soll durch ein Verfahren, dass führt Validierungs- und andere Geschäftslogik zugeordnet werden.

sollten Unit-Tests zu testen Funktionalität beschränkt werden, dass Sie in Ihrer Anwendung implementieren.

Sie sollten nicht Test API / SDK, dass Ihre Anwendung beruht auf. Teilweise, weil es eine Verschwendung von Zeit (hat Ihr Unternehmen zahlen will für Sie testen X-Third-Party-SDK / API?), Und zum Teil, weil es führt „Rauschen“ in der Unit-Test-Suite. Der Rahmen Ihrer Unit-Test-Bibliothek nur Test sollte nur der Code in Ihrer Anwendung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top