3 Stimmen

Was ist der Umfang von Unit-Tests?

Ich bin von der Nützlichkeit von Unit-Tests überzeugt, aber ich verstehe die Regeln dafür wirklich nicht..

Wenn ich eine Klasse mit einer anderen verknüpft habe

public class MyClass
{       
    private SecondClass MySecondClass;

    public MyClass()
    {
        this.MySecondClass = new SecondClass ();
    }
}

Das Feld ist privat und die Klasse MyClass hat eine Methode wie diese:

public ThirdClass Get()
{
    return this.MySecondClass.Get();
} 

Wie kann ich das testen?? Ich gehe davon aus, dass ich testen muss, ob die Methode MyClass.get() wirklich MySecondClass.Get() aufruft! Aber ich kann kein Mock-Objekt von SecondClass erstellen und es der ersten Zuweisen, weil es sich um ein privates Feld handelt.. Also frage ich mich wirklich, wie das möglich ist, dies zu testen..

Danke

4voto

Darin Dimitrov Punkte 990883

Sie können dies nicht einfach durch Unittests testen, da die Instantiierung fest codiert ist. Sie könnten die Konstruktorinjektion verwenden, bei der Sie es mocken könnten:

public class MyClass
{       
    private SecondClass _mySecondClass;

    public MyClass(SecondClass mySecondClass)
    {
        _mySecondClass = mySecondClass;
    }

    public ThirdClass Get()
    {
        return _mySecondClass.Get();
    } 
}

Jetzt könnten Sie in Ihrem Unittest jede beliebige Instanz dieser Klasse bereitstellen. Das ist das Prinzip der Inversion of Control. Klassen sind nicht mehr dafür verantwortlich, ihre Abhängigkeiten zu instanziieren, sondern der Verbraucher dieser Klassen, der die Abhängigkeiten übergibt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X