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

Django Python Discussion :

tests unitaires - assertQuerysetEqual


Sujet :

Django Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 42
    Points : 29
    Points
    29
    Par défaut tests unitaires - assertQuerysetEqual
    Bonjour, je ne comprends pas la ligne 16 du code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    from django.test import TestCase 
    from django.core.urlresolvers import reverse 
    from models import MiniURL 
    from views import generer 
    def creer_url(): 
        mini = MiniURL(url="http://foo.bar",code=generer(6), pseudo="Maxime") 
        mini.save() 
        return mini 
    class MiniURLTests(TestCase): 
        def test_liste(self): 
            """ Vérifie si une URL sauvegardée est bien affichée """ 
            mini = creer_url() 
            reponse = self.client.get(reverse('mini_url.views.liste')) 
            self.assertEqual(reponse.status_code, 200) 
            self.assertContains(reponse, mini.url) 
            self.assertQuerysetEqual(reponse.context['minis'], [repr(mini)])
    Je ne comprends pas bien le fonctionnement de assertQuerysetEqual et de la fonction repr().

    Je vous remercie.

    Sinouhé

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 817
    Points : 7 110
    Points
    7 110
    Par défaut
    Bonsoir,

    Que ne comprends-tu pas dans ce qui est indiqué dans la documentation ?

    Ça me semble assez clair, non ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    À la base mon cours sur Django explique la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.assertQuerysetEqual(reponse.context['minis'], [repr(mini)])
    comme cela :

    « Troisième et dernière vérification : est-ce que le QuerySet minis contenant toutes les redirections dans notre vue (celui que nous avons passé à notre template et qui est accessible depuis reponse.context ) est égal au QuerySet indiqué en deuxième paramètre ? En réalité, le deuxième argument n’est pas un QuerySet ,mais est censé correspondre à la représentation du premier argument grâce à la fonction repr . Autrement dit, il faut que repr(premier_argument) == deuxieme_argument . Voici à quoi ressemble le deuxième argument dans notre exemple : ['<MiniURL : [ALSWM0] http://foo.bar>'] . »

    Je pense que c'est la fonction transform que je ne comprends pas.

    Dans le doc, il est écrit :

    La comparaison des contenus de qs et de values se fait par la fonction transform. Cela signifie que par défaut c’est la représentation repr() de chaque valeur qui est utilisée pour la comparaison.
    Dans mon cas, si j'ai bien compris, la valeur est «mini» (une entrée du modèle «MiniURL»). Je ne visualise pas ce qu'est la représentation d'une entrée.

    Désolé je suis novice.

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 817
    Points : 7 110
    Points
    7 110
    Par défaut
    Bonjour,

    repr est une fonction standard qui transforme un objet python en chaîne de caractères.

    Exemple,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> l = list(range(3))
    >>> l
    [0, 1, 2]
    >>> repr(l)
    '[0, 1, 2]'  # remarque les simple quotes
    Donc pour faire simple, on compare à l'aide de cette fonction transform, deux requêtes castées en chaînes de caractères.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    Ok merci j'ai compris le fonctionnement de repr().

    Concernant le fonctionnement de "assertQuerysetEqual", j'ai lu ça sur stackoverflow :

    assertQuerysetEqual takes a queryset, a list of values and a transform callable which is called on the queryset to convert it into something comparable to the list of values. By default this callable is repr. This is kind of irritating since it doesn't actually compare two querysets, but the easy fix for most cases is using map(repr, your_second_queryset) for the list of values.
    Dans mon exemple, si j'ai bien compris, le test échouera forcément car si on regarde la ligne 16 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.assertQuerysetEqual(reponse.context['minis'], [repr(mini)])
    minis est un queryset regroupant toutes les entrées de la table MiniURL alors que mini est seulement une entrée.

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 817
    Points : 7 110
    Points
    7 110
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reponse.context['minis']
    retourne peut-être un seul élément dans ce cas de figure ? Vous seul pouvez le savoir car quand on écrit un test unitaire, on connaît le test et le résultat du test.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    Ah ok merci beaucoup pour tes indications.

Discussions similaires

  1. Tests unitaires & base de données
    Par lalystar dans le forum Test
    Réponses: 15
    Dernier message: 18/06/2010, 16h50
  2. Tests Unitaires - Production de documents
    Par giviz dans le forum Test
    Réponses: 13
    Dernier message: 07/02/2005, 08h41
  3. Tests unitaires en C#
    Par Bouboubou dans le forum Test
    Réponses: 2
    Dernier message: 01/10/2004, 13h03
  4. [TESTS] Tests unitaires
    Par mathieu dans le forum Test
    Réponses: 4
    Dernier message: 08/01/2004, 12h59

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