Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   CommandLine zur Laufzeit setzen (https://www.delphipraxis.net/203587-commandline-zur-laufzeit-setzen.html)

TigerLilly 3. Mär 2020 07:46

Delphi-Version: 5

CommandLine zur Laufzeit setzen
 
Ich habe eine Klasse, die CmdLine auswertet. Um die Klasse zu testen, brauche ich geeignete Testfälle. Ich würde daher gern die CmdLine vor den Tests vom Programm selber setzen.

Code:
CmdLine:=Application.exename + ' /r=demo /s=abc';
Geht das überhaupt?

Klaus01 3. Mär 2020 08:03

AW: CommandLine zur Laufzeit setzen
 
Verstehe ich das richtig, Du möchtest die Unit-Tests automatisch laufen lassen, vor Begin
möchtest Du Test-Parameter (manuell) setzen.
Kannst Du die Parameter nicht im Test-Setup setzen?
Vielleicht ist das ein Ansatz? -> https://www.delphipraxis.net/203415-...parameter.html

Grüße
Klaus

TigerLilly 3. Mär 2020 08:12

AW: CommandLine zur Laufzeit setzen
 
Nicht wirklich, aber trotzdem danke dafür.

Ich kann über Run/Parameter die CmdLine setzen, oder ich starte die Tests über Batchjobs, aber besser gefallen würde mir, wenn ich die CmdLine im Code ändern könnte.

Klaus01 3. Mär 2020 08:15

AW: CommandLine zur Laufzeit setzen
 
.. dann willst Du das Programm testen (white box testing) und nicht nur die cmdLine Parser Klasse.

Grüße
Klaus

dummzeuch 3. Mär 2020 08:31

AW: CommandLine zur Laufzeit setzen
 
Zitat:

Zitat von TigerLilly (Beitrag 1458794)
Ich habe eine Klasse, die CmdLine auswertet. Um die Klasse zu testen, brauche ich geeignete Testfälle. Ich würde daher gern die CmdLine vor den Tests vom Programm selber setzen.

Code:
CmdLine:=Application.exename + ' /r=demo /s=abc';
Geht das überhaupt?

Nein, aber das Auslesen der CmdLine ist doch der triviale Teil, testen willst Du doch die Auswertung. Also ändere Deinen Code so, dass Du die CmdLine als Parameter übergibst und teste das.

TigerLilly 3. Mär 2020 09:06

AW: CommandLine zur Laufzeit setzen
 
Zitat:

Zitat von dummzeuch (Beitrag 1458801)
aber das Auslesen der CmdLine ist doch der triviale Teil, testen willst Du doch die Auswertung. Also ändere Deinen Code so, dass Du die CmdLine als Parameter übergibst und teste das.

Ja, das ist der Plan B. :thumb:

freimatz 3. Mär 2020 09:12

AW: CommandLine zur Laufzeit setzen
 
Zitat:

Zitat von TigerLilly (Beitrag 1458794)
Ich habe eine Klasse, die CmdLine auswertet.

Wird wirklich die CmdLine ausgewertet oder doch eher ParamStr() verwendet?

Wie dem auch sei, Du musst das Auslesen der CmdLine von der Auswertung trennen.
a) Du könntest den Code der Auswertung so ändern, dass er nicht direkt ParamStr abfragt sondern z.B. ein Array mit den Params bekommt. Dann kannst du im Tests diese Array abfüllen. Im Produktivcode wird das Array halt mit ParamStr abgefüllt, was Du dann nicht testen kansnt.
b) Du machste eine neue unit die du bei uses aufführst. In diese unit definierst Du ParamStr und ParamCount neu, welche dann jeweils auf die orginalen Param-Methoden zugreifen oder Testdaten liefern.
Ich habe mal

Ich selber habe mal den Parser von http://www.finalbuilder.com benutzt. Der macht intern auch die Trennung.
Leider ist die Methode "function TCommandLineParser.Parse(const values: TStrings): ICommandLineParseResult;" nicht public, liese sich weil Sourcen alle da leicht ändern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz