IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[phpunit] comparaison DateTime


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur
    Inscrit en
    Janvier 2010
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2010
    Messages : 232
    Par défaut [phpunit] comparaison DateTime
    Bonjour,

    Je cherche à vérifier si l'instanciation de mon objet s'est bien passée et je teste la date de début de projet qui doit être supérieure à la date du jour.
    voici le code écrit pour que ce test marche toujours quelle que soit la date du jour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     public function testSetDateDebutOK() : void
        {    
            $dateAfter = date_add(new \DateTime(), date_interval_create_from_date_string("10 days"));
            $dateAfterExpected = clone($dateAfter);
            $p = new Projet(1, "Nom du Projet", $dateAfter, 12);
            $this->assertEquals($dateAfterExpected, $p->getDateDebut());
        }
    Et voici le message
    Failed asserting that two variables reference the same object.
    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function testSetDateDebutOK() : void
        {    
            $dateAfter = date_add(new \DateTime(), date_interval_create_from_date_string("10 days"));
            $dateAfterExpected = clone($dateAfter);
            $p = new Projet(1, "Nom du Projet", $dateAfter, 12);
            $this->assertObjectEquals($dateAfterExpected, $p->getDateDebut());
        }
    et voici

    PHPUnit\Framework\ComparisonMethodDoesNotExistException: Comparison method DateTime::equals() does not exist.
    Merci pour vos lumières !

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 699
    Par défaut
    essayez de comparer les timestamp en passant par $dateAfterExpected->createFromFormat("U") par exemple.

  3. #3
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 441
    Par défaut
    Bonjour,

    De mon côté avec une classe Projet toute simple, ton test fonctionne correctement avec assertEquals(). Cette assertion n'est pas censée déclencher ton premier message d'erreur.
    Par contre le même test avec assertSame() au lieu de assertEquals() déclenche bien la première erreur que tu mentionnes.
    Voir https://phpunit.readthedocs.io/en/9....tml#assertsame

    Ta deuxième erreur indique simplement que la classe DateTime ne possède pas de méthode equals.
    L'assertion assertObjectEquals() implique que l'objet à comparer possède une méthode de comparaison qui est nommée par défaut equals(), voir https://phpunit.readthedocs.io/en/9....rtobjectequals

    Pour faire simple et correspondre à la description de ton test, j'aurais comparé le timestamp du projet avec le timestamp courant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public function testNewProjet()
        {
            $p = new Projet(1, "Nom du Projet", new \DateTime('+10 days'), 12);
     
            $this->assertGreaterThan(time(), $p->getDateDebut()->getTimestamp(), 'la date de début de projet doit être supérieure à la date du jour');
        }

  4. #4
    Membre éclairé
    Profil pro
    Développeur
    Inscrit en
    Janvier 2010
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2010
    Messages : 232
    Par défaut
    Bonsoir,
    Merci pour vos réponses qui m'ont bien aidé.
    J'ai pu résoudre tous mes problèmes de dates.
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] link label avec comparaison datetime
    Par jimmydemon dans le forum VB.NET
    Réponses: 5
    Dernier message: 23/02/2014, 15h03
  2. comparaison datetime avec valeurs null
    Par misscricri dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/02/2012, 08h35
  3. c# comparaison de deux DateTime
    Par Destiny dans le forum Windows Forms
    Réponses: 6
    Dernier message: 13/04/2007, 19h36
  4. [VBA-E] Comparaison date / datetime
    Par dahu29 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/03/2006, 13h12
  5. [SYBASE] Comparaison de deux datetime
    Par paf15 dans le forum Sybase
    Réponses: 1
    Dernier message: 17/04/2005, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo