2017-05-15 5 views
0

Ich benutze PascalMock (http://sourceforge.net/projects/pascalmock/), um verschiedene Schnittstellen in meinen DUnit-Komponententests nachzuahmen.Wie var-Parameter mit PascalMock zurückgegeben werden

Ich bin vertraut mit dem Umgang mit Parametern und Rückgabewerte, aber ich verstehe nicht, wie var Parameter zu codieren.

Um zum Beispiel eine Schnittstelle Version zu verspotten, wenn TIniFile.ReadSections, die ich versucht habe:

procedure TIniFileMock.ReadSections(Strings: TStrings); 
begin 
    AddCall('ReadSections').WithParams([Strings]).ReturnsOutParams([Strings]); 
end; 

und dann die Erwartung mit:

IniMock.Expects('ReadSections').WithParams([Null]) 
    .ReturnsOutParams([Sections]); 

aber diese Rückkehr nicht die Werte das habe ich in Abschnitte eingefügt. Ich habe verschiedene andere Permutationen ausprobiert, aber offensichtlich vermisse ich etwas. Im Internet scheint es kaum Beispiele zu geben.

Was ist der richtige Weg, um var-Parameter mit PascalMock zurückzugeben?

+0

'TIniFile.ReadSections' hat keinen' var' Parameter. Der von Ihnen angegebene Code entspricht nicht der Frage, auf die Sie eine Antwort haben möchten. –

+0

Danke @RobKennedy, ich habe festgestellt, dass ich etwa 10 Minuten nachdem ich es gepostet habe, ein bisschen "Moment" gehabt habe. Die Frage steht immer noch, aber mein Beispiel ist lächerlich. Ich werde die Frage bearbeiten, wenn ich einen Moment habe. –

Antwort

1

Sie scheinen missverstanden zu haben, wie TIniFile.ReadSections funktioniert.

Der Strings Parameter zu dieser Methode ist kein var Parameter, sondern einfach eine Objektreferenz.

Du abgeleitetes Objekt zu einem TStrings in einer Referenz passiert erforderlich (in der Regel eine Instanz eines TStringList). Das Verfahren liest dann die Abschnittsnamen aus der INI-Datei und fügt sie zu den TStrings Objekt, das Sie geliefert:

Zum Beispiel:

sections := TStringList.Create; 
try 
    ini.ReadSections(sections); 

    // Do some work with the 'sections' 
    // .. 

finally 
    sections.Free; 
end; 

Mit dieser Klarstellung ich Sie vermuten, müssen Sie Ihre Ansatz ändern Spott über die INI-Datei und natürlich Ihre Erwartungen, die einfach falsch sind. Wenn Sie ReadSections mit einem NIL Parameter aufrufen, wird es entweder mit einer Zugriffsverletzung fehlschlagen oder einfach nichts tun (ich vermute ersteres).

+0

Dank @deltics, erkannte ich, dass mein Beispiel ziemlich falsch war. Ich werde ein besseres Beispiel für die Frage geben, zusammen mit einer anderen Lösung, die mir einen Teil des Weges dorthin gebracht hat. –

Verwandte Themen