Schrift
[thread]12524[/thread]

Testen und dabei eine Mock Klasse verwenden.

Leser: 3


<< >> 3 Einträge, 1 Seite
Gast Gast
 2008-09-21 18:15
#114819 #114819
Hallo

Ich möchte ein vorhandenes Perl-Skript bzw. Modul testen. (sagen wir es heißt fertig.pl und das test-Skript: test_fertig.pl)

Dabei benutze ich TEST::Simple bzw TEST::MORE

Jetzt bentutz fertig.pl ein Modul namens Extern1.
Ich habe in test_fertig.pl eine Classe die Extern1MOCK heißt (mit selben Methoden wie Extern1 usw.).

Ich möchte jetzt das während der Test fertig.pl auf diese MOCK-Klasse zugreift.



Ich könnte jetzt klar den Zeiger in fertig.pl der auf Extern1 zeigt neu belegen.

Aber gibt es eine schönere Möglichkeit?
Gefunden hab ich: Test::MockObject.

Aber hier hab ich nicht herausgefunden wie ich eine ganze Klasse mocken kann. (nur einzelne Funktionen)

Könnt ihr mir weiter helfen?

Danke
Spieler
 2008-09-21 23:28
#114820 #114820
User since
2007-09-24
70 Artikel
BenutzerIn
[default_avatar]
Hallo,

du kannst perl ein anderes Modul zum Testen unterschieben:

Extern.pm:
Code: (dl )
1
2
3
4
5
6
package Extern;

sub testsub{
print "Extern::testsub\n";
}
1;

ExternMock.pm:
Code: (dl )
1
2
3
4
5
6
7
BEGIN{ $INC{'Extern.pm'}= __FILE__};
package Extern;

sub testsub{
print "MockExtern::testsub\n";
}
1;

MyModule.pm:
Code: (dl )
1
2
3
4
5
6
7
8
package MyModule;
use Extern;

sub mymodule_do_work{
print "during my work I will call 'Extern->testsub':\n";
Extern->testsub;
}
1;

und mymodule_test.pl:
Code: (dl )
1
2
3
4
5
6
7
8
use strict;
use warnings;

use ExternMock; # oder auch nicht...
use MyModule;

#Extern->testsub;
MyModule::mymodule_do_work(); #soll das natürlich heissen


Dann muss aber ExternMock.pm alles implementieren, was du brauchst. Durch die %INC Manipulation wird Extern.pm nicht mehr geladen.
Ich weiss nicht, ob man es im Ernstfall so machen würde. Ich hab so etwas noch nie gebraucht...

Grüße, Christoph
Gast Gast
 2008-09-23 15:13
#114866 #114866
Hey

Danke schon mal, das ist ja zumindest eine Lösung die funktioniert...

Allerdings finde ich das überschreiben des INC-Eintrages nicht die schönste Lösung, aber wenn sonst keiner eine hat, werd ich das wohl so machen müssen.


Viele Grüße
<< >> 3 Einträge, 1 Seite



View all threads created 2008-09-21 18:15.