18. November 2008 23:58

partyspaß #314: unittests

von robert 7. Aug 2006 16:21 (vor 834 Tagen) ~ comments(0)

ich habe ein neues hobby: testfälle schreiben. unsere php bibliothek, die wir in allen programmen verwenden heisst xorc. wir fügen regelmäßig funktionen hinzu oder schreiben welche um. ganz normal. eine der basisfunktionen ist unser OR mapper genannt xorcstore. ich hatte mir seit geraumer zeit vorgenommen die API zu überarbeiten: schoenere namen finden (zb: find() statt select(), create() statt insert()..), die parameterreihenfolge vereinheitlichen usw.

da ich ein fan von rails geworden bin, lag die idee nahe, sich bei den funktionsaufrufen an activerecord zu orientieren. also habe ich angefangen die funktionen anzugleichen. das führte dann dazu, dass ich immer größere teile komplett umgeschrieben habe. also nach anderthalb tagen sprach ich vor mich hin: ich arbeite jetzt an einem rails clone. genauer: ich portiere activerecord nach php.

ich fing an die fixtures und testfälle von activerecord zu kopieren, in php syntax zu setzen und das (häufig fehlende) feature in meine xorcstore_AR klasse einzubauen. so eine OR mapping bibliothek ist der klassische kandidat für unittests. wie oft ändert man eine kleinigkeit und fragt sich: welche auswirkung hat das jetzt auf die anderen anwendungen? das abfahren der automatischen tests gibt da schon eine recht hohe sicherheit, dass man sich nichts kaputtmacht. in meinem fall entwickelten sich die tests zu einem gradmesser: wieviel habe ich schon geschafft? ach, soviel!

… daraus folgt: es macht süchtig! nochein test und noch einer. juhu! gestern abend nach gut einer woche arbeit habe ich dann meinen 601. test erfolgreich durchgebracht. allerdings waren das dann nummerntests, die mir auf einen schlag über hundert testfälle bescherten.

dieses beispiel enthält 62 testfälle. das macht dann spaß:

 function test_valid_num_of_with_int_only_and_nil_allowed(){

    $NIL = array(null, "", " ", " \t \r \n");
    $FLOAT_STRINGS = array(0.0, "+0.0", -0.0, "10.0", 10.5, 
         "-10.5", -0.0001, -090.1);
    $INTEGER_STRINGS = array(0, +0, -0, 10, 
         +10, -10, 0090, -090);

    $FLOATS = array_merge(array("0.0", "10.0", 10.5,
         -10.5, -0.0001), $FLOAT_STRINGS);
    $INTEGERS = array_merge(array(0, 10, -10),
         $INTEGER_STRINGS);
    $JUNK = array("not a number", "42 not a number",
         "0xdeadbeef", "00-1", "--3", "+-3", 
         "+3-1", "-+019.0", "12.12.13.12");

    $topic=new Topic;
    $topic->validation->reload($topic);
    $topic->validation->add(
         'validates_numericality_of',
         array(
            'approved'=>array(
                "allow_null"=>true,
                'only_integer'=>true)
               )
          );

    # print_r(localeconv());

    foreach(array_merge($JUNK, $FLOATS) as $value){
       var_dump($value);
       $t = $topic->create(array(
         "title" => "numeric test", 
         "content" => "whatever", 
         "approved" => $value));
       $this->assertFalse($t->is_valid(), 
          "{$value} not rejected as a number");
       $this->assertTrue($t->errors->on('approved'));

    }

    foreach(array_merge($NIL, $INTEGERS) as $value){
       $t = $topic->create(array(
          "title" => "numeric test", 
          "content" => "whatever", 
          "approved" => $value));
       $this->assertTrue($t->is_valid(), 
          "{$value} not accepted as a number");
    }
 }

Kommentare

Kommentar
Dein Name *
Deine E-Mail-Adresse * (nur für die Redaktion, wird nicht veröffentlicht!)
Deine Internetseite
Angaben für weitere Kommentare merken?
 

About
alotta-log is your friendly blogserver. multiuser - multiblog - php/my/xorc based.

currently this is a beta version. stay tuned.
Impressum
Disclaimer
"this site looks best if you come over here and look at my monitor."
 
Themen
Unser T-Shirt
tags
neueste eintraege in diesem blog
Archiv
< 2006 >
Jan Feb(1) Mär Apr
Mai Jun(3) Jul Aug(4)
Sep(4) Okt(2) Nov(1) Dez
mixtape

1 DJ T / Robot Riot - Electric Press Remix

2 Bucci Bag / More Lemonade - Sparkling Version

3 Soto / Hootenanny - Original Mix

4 Joe Galdo / Keef - Original Mix

5 Myagi / Subversion - Price Cuts Remix

6 DJ Fixx / Electric - Original Mix

7 DJ Fixx / Push Em Up - Original Mix

8 Klaus / Big Man - Original Mix

9 Jesse Saunders / Everybody - Slapin Breaks Remix

10 Soto / Manic - Soto Remix

11 Chikinki / Like It Or Leave It

www.flickr.com
Administration

rss/xml xorc based
hintergrund von squidfingers
alotta-in-the-middle, 2005