2009-08-19 7 views
0

Je m'essaie à TDD avec PHP et j'écris une application web pour accéder aux articles dans une base de données MySQL; c'est la fonction de test:PHP: le paramètre string de __construct n'est pas passé correctement

class TestArticleTestCase extends UnitTestCase { 

... 

public function testArticleGenerateInsertSqlString() { 
    $testArticle = new Article("12345", "2009-09-13 20:20:20", "Test heading", "Test text"); 

    ... 

} 

et c'est la classe Article:

class Article { 
    private $_articleId; 
    private $_pubDate; 
    private $_heading; 
    private $_text; 

    public function __construct($articleId, $pubDateUnchecked, $headingUnescaped, $textUnescaped) { 
     echo "pubDateUnchecked == $pubDateUnchecked </BR>"; 
      ... 

} 

J'inclus l'écho dans le constructeur parce que les dates de la base de données n'a pas été ce que j'initialisés l'article avec, et bien sûr, trouver le problème, c'est la sortie de l'écho dans le constructeur:

pubDateUnchecked == 2005-06-01 12:00:00

Peut-être que j'ai juste regardé ce code trop longtemps, mais comment la chaîne peut-elle changer d'endroit où je l'instancie directement, avant de commencer à la manipuler comme une date (je vérifie qu'elle est dans un format de date autorisé avec strtotime() et date() plus tard ..).

Est-ce que quelqu'un a des idées sur où chercher?

Merci, Stephan.

+0

êtes-vous sûr? Je ne vois rien de mal dans ce code – knittl

Répondre

0

Peut-être un problème de cache? Ou vous avez modifié le mauvais fichier? Est arrivé avant ;-)
Un débogueur serait utile dans ce cas. Mais si vous n'avez pas/ne pouvez pas en installer un, essayez quelque chose comme

public function testArticleGenerateInsertSqlString() { 
    $testdata = array(
    array('articleId'=>"12345", 'pubDateUnchecked'=>"2009-09-13 20:20:20", 'headingUnescaped'=>"Test heading", 'textUnescaped'=>"Test text") 
); 
    echo '<div>Test. Now=', date('Y-m-d H:i:s'),' modtime(__FILE__)=', date('Y-m-d H:i:s', filemtime(__FILE__)), "</div>\n"; 
    foreach($testdata as $t) { 
    echo "<div>Test. new Article({$t['articleId']}, {$t['pubDateUnchecked']}, {$t['headingUnescaped']}, {$t['textUnescaped']})</div>"; 
    $testArticle = new Article($t['articleId'], $t['pubDateUnchecked'], $t['headingUnescaped'], $t['textUnescaped']); 
+0

Merci beaucoup pour ce code de test VolkerK! Je l'ai couru et ai trouvé le problème pour être dans la ligne si ($ timestamp = strtotime ($ pubDateUnchecked) === faux) { jette une nouvelle exception ('pubDate invalide. La date doit être par exemple AAAA-MM-JJ H: MME'); } \t qui a produit "1970-01-01 02:00:00" de manière cohérente. Entourant le devoir avec() a résolu le problème .. Dankie! – gouwsmeister

Questions connexes