Wie man einen Konstruktor mit Mocker verspottet

8

Ich muss testen, dass der Code eine neue Instanz einer Klasse mit bestimmten Parametern erstellt:

%Vor%

Ich habe versucht, einen Alias-Mock zu erstellen und eine Erwartung für die __construct -Methode festzulegen, aber es hat nicht funktioniert:

%Vor%

Diese Erwartung wird niemals erfüllt: Mockery\Exception\InvalidCountException: Method __construct(object(Mockery\Matcher\Type), 3) from Symfony\Component\Console\Helper\ProgressBar should be called exactly 1 times but called 0 times.

Weißt du irgendeinen anderen Weg, wie man das mit Mocker testen kann?

    
VaclavSir 01.06.2015, 13:42
quelle

1 Antwort

1

Nun, Sie können den Konstruktor nicht vortäuschen. Stattdessen müssen Sie Ihren Produktionscode geringfügig ändern. Wie ich aus der Beschreibung erraten kann, haben Sie so etwas:

%Vor%

Was nicht der beste Code der Welt ist, weil wir Dependance haben. (Das ist völlig in Ordnung, wenn ProgressBar beispielsweise Value Object ist).

Zuerst sollten Sie ProgressBar getrennt von Foo testen. Weil du dann Foo testest, brauchst du nicht zu wissen, wie ProgressBar funktioniert. Sie wissen, dass es funktioniert, Sie haben Tests dafür.

Aber wenn Sie es immer noch aus irgendeinem Grund testen wollen, gibt es zwei Möglichkeiten. Für beide Möglichkeiten müssen Sie new ProggresBar

extrahieren %Vor%

Weg 1:

%Vor%

Weg 2:

%Vor%

Viel Spaß beim Testen!

    
Alexander Matrosov 29.12.2017 15:24
quelle

Tags und Links