2010-10-17 2 views
1

J'essaie d'écrire des tests pour une classe d'assistant de date. Je me demande quelle est la meilleure pratique pour cela.
Voici un exemple en PHP.Test de l'unité des fonctions sensibles?

public static function get_date($offset = 0){ 
     $date = mktime(0, 0, 0, date('m') , date('d') + $offset, date('Y')); 
     return array(
      'day' => date('D',$date), 
      'month' => date('M',$date), 
      'year' => date('Y',$date) 
     ); 
    } 

    public static function today(){ 
     return self::get_date(); 
    } 

    public static function tomorrow(){ 
     return self::get_date(1); 
    } 

    public static function yesterday(){ 
     return self::get_date(-1); 
    } 

Alors ce que je cherche est des exemples de tests qui pourraient tester ces fonctions ou une nouvelle façon d'écrire ces fonctions de sorte qu'ils sont intuitivement testable.

J'ai trouvé des exemples en Java, mais ils semblent assez inélégant et je ne sais vraiment pas Java, à moins que vous comptez Actionscript 3 comme Java;)

Solutions en Javascript ou Ruby serait également super utile à titre d'exemples, mais ma classe est écrite en PHP donc ce serait idéal.

Merci!

Répondre

3

je fais quelque chose comme ceci:

<?php 

class Date 
{ 
    protected $date; 

    public function __construct($date = null) 
    { 
     $this->date = $date ? $date : time(); 
    } 

    public function today() 
    { 
     // to something with $this->date 
    } 
} 


class DateTest extends PHPUnit_Framework_TestCase 
{ 
    public function testToday() 
    { 
     $date = new Date(strtotime('2010-10-17 00:00:00')); 
     $this->assertEquals($expectedValue, $date->today()); 
    } 
} 

Il suit le même principe que date() le fait, qui doit recevoir un second argument optionnel, le temps de référence. Je veux garder les fonctions statiques.

+0

Whaddaya pense? – mraaroncruz

+2

Les méthodes statiques sont considérées comme un non-non dans le monde des tests unitaires car elles rendent difficile le test du code qui en dépend. Une autre chose est qu'en utilisant des méthodes d'instance, vous déclarez dans votre API qu'une certaine méthode ne peut pas être utilisée à moins que le constructeur ne s'exécute avec succès. Vous pouvez donc effectuer des validations dans votre constructeur et lancer une exception en conséquence. Avec les méthodes statiques, vous n'avez pas l'équivalent d'un constructeur. –

+2

Je n'étais pas au courant que les méthodes statiques sont désapprouvées. J'aime les utiliser pour mes assistants. Tant pis. Bye Bye méthodes statiques ... :(Bonjour test plus facile d'écriture :) – mraaroncruz