erstellt von max, am 09.06.2008 12:59

so.. hab jetzt ein mini-test framework in webtek eingebaut:

  • es gibt jetzt ein MyApp/scripts/test verzeichnis
  • in diesem koennen .t files drinnen liegen (gruppierung in unterverzeichnisse ist keine problem)
  • dieses test verzeichnis ist natuerlich auch in jedem modul moeglich
  • ein simples test-file sieht so aus:

    sub init   { }    #... place some code before calling the tests
    sub finish { }    #... place some code after calling the tests
    
    sub sample_test :Test(2) {
       ok(1, "sample test");
       is(2, 2, "sample test2");
    }
    

    • zuerst gibt es die funktionen init und finish. diese funktionen werden in jedem fall zum anfang und zum ende eines test-files ausgefuehrt. diese kann man verwenden um irgendwas zu initialisieren, bzw dann wieder aufzuraeumen (db. usw.)
    • dann gibt es test funktionen. diese werden durch das Test(\d+) attribute deklariert.
    • in diesem attribute muss man angeben, wieviele tests in dieser funktion gemacht werden (also ok, is, like, dies_ok, ... usw aufrufe)
    • alle weiteren funktionen ohne dem attribute werden nicht im rahmen der tests aufgerufen. d.h. diese koennen als hilfsfunktionen fungieren
  • als assertions koennen alle funktionen aus Test::More und Test::Exception verwendet werden.
  • um die tests auszufuehren wird wiedermal das webtek script verwendet. hier der aufruf mitsammt ergebnisliste:

    maxs-macbook:MapToolkit max$ ./webtek test
    
    [info] run testfile /WebTek/app/MapToolkit/scripts/test/Model/X.t
    [info]    - run test 'sample_test' with 2 tests:
    [info] run testfile /WebTek/app/MapToolkit/scripts/test/Page/X.t
    [info]    - run test 'index' with 1 tests:
    [error]      there were some failed tests, look at the details:
    [error]         not ok 1
    [error]            Failed test at /WebTek/app/MapToolkit/scripts/test/Page/X.t line 9.
    [error]                   got: undef
    [error]              expected: 'testvalue'
    
    result: 
     - planned: 3
     - successful: 2
     - failed: 1
    

    man sieht hier, dass ein test fehlerhaft war, und ganz unten ist noch eine zusammenfassung von allen tests in allen test-files.

Controller testen

um einen controller zu testen gibt es die WebTek::Engine::Test Engine. mit dieser kann man den request, response und session initialisieren. ein simpler test sieht dann aus:

sub index :Test(1) {
   app->engine->prepare;
   app->Page->Root->new->index;
   is(response->title, 'WebTek Tests');
}

sub create :Test(4) {
   #... test get
   app->engine->prepare;
   app->Page->Root->new->create;
   is(response->title, 'WebTek Tests - Create new Test');
   #... test post
   app->engine->prepare(
      'method' => 'post',
      'params' => { 'name' => [qw( new test )] },
   );
   thorws_ok { app->Page->Root->new->create } 'WebTek::Exception::Redirect';
   is(response->status, 302);
   #... check created model
   my $test = app->Model->Test->find_one('name' => 'new test');
   isa_ok($test, app->Model->Test);
}

Nachtrag

so.. das war jetzt nur ein kleiner auszug, wie man testen kann. mehr weis ich selber noch nicht, da ich bis jetzt selber noch nicht getestet hab (schande ueber mich).

weiters bin ich jetzt an dem punkt angelangt, andem WebTek feature-complete ist. die aktuelle version ist 0.9.1, und hoffenlich gibt es dann bald eine version 1.0, welche ueber

  • viele Tests
  • und eine gute doku

verfuegt!

Neuen Kommentar schreiben: