6
votes

Exemples d'utilisation de doctests à Django de manière agile / BDD

Je suis intéressé par l'apprentissage des doctestes et des tests unitaires de manière plus agile / BDD. J'ai trouvé quelques tutoriels qui semblent raisonnables, mais ils sont juste des vignettes. Ce que j'aimerais vraiment voir, c'est le code source de certains projets de Django développés de style BDD.

Les choses que je ne suis pas clair sur sont comment gérez-vous des objets de demande, etc. J'ai une situation où j'ai déployé mon application et je reçois un comportement totalement différent de la production que j'ai faite dans le développement ou même de la coquille Python sur le serveur de production. J'espère que certains doctests m'aideront à me diagnostiquer et à ouvrir la porte d'un processus plus agile d'écrire les tests d'abord.

Spécifiquement, voici le code que j'essaie de tester: xxx

Comment créer un doctest qui garantit que l'index retourne 10 objets?
Les requêtes du produit semblent fonctionner correctement de la coquille sur le serveur de production. Le serveur actuel ne renvoie aucun produit du tout.


1 commentaires

Si vous voulez un outil BDD, essayez de laitue.


4 Réponses :


0
votes

Le Zope.TestBrowser Paquet pourrait être utile dans vos doctestes, car vous voulez analyser la réponse HTML rendue de votre serveur de production.


0 commentaires

1
votes

La façon dont votre point de vue est écrit, il serait difficile de tester. Vous devriez gratter le HTML pour voir si le contenu souhaité est présent, puis vous testez plus que vous ne devez. Il serait préférable de réécrire votre vue pour faciliter la test de tester. Commencez par paramétrer votre nom de modèle, vous pouvez donc créer un modèle de test simple: xxx pré>

puis vous pouvez écrire un modèle simple qui compte simplement le nombre de produits: P>

{{ products.count }} 


1 commentaires

Je ne suis pas sûr que je suive cela. Souhaitez-vous tester le modèle avec un doctest? J'aimerais voir des projets de Django où cela avait été mis en œuvre.



3
votes

Je me suis demandé la même question auparavant. J'ai trouvé des doctestes d'être utilitaire limité pour des vues, des méthodes de modèle et des gestionnaires, car

  1. Vous devez être capable de configurer et de détruire un ensemble de données de test pour utiliser réellement pour tester li>
  2. Les vues doivent prendre un objet de demande. Dans un doctest, où vient-il? Li> ol>

    Pour cette raison, j'ai toujours utilisé le Django Test de l'unité cadre qui gère tout cela pour vous. Malheureusement, cependant, vous n'obtenez pas certains des avantages des doctestes et cela rend TDD / BDD plus difficile à faire. Ce qui suit ensuite est spéculation pure forte> sur la manière dont vous pourriez faire ce travail: p>

    Je pense que vous voudriez saisir des doctestes de leurs modules et fonctions respectifs et les exécuter dans les tests de l'unité cadre. Cela s'occuperait de la configuration des données de test / démolition. Si vos doctestes ont été exécutés à partir d'une méthode de test de quelque chose qui sous-classes Unitest.Seest de Django, ils seraient en mesure d'utiliser ce test DB. Vous seriez également en mesure de transmettre un objet de requête moqueur dans le contexte d'exécution du test DOC. Voici un Django Snippet qui fournit un objet de requête moqueur et info dessus. Disons que vous vouliez tester les doctorats de toutes les vues d'applications. Vous pouvez faire quelque chose comme ceci dans TESTS.PY: P>

    def index(request):  
        """
        returns the top 10 most clicked products
    
        >>> response = index(REQUEST)
        >>> [test response content here]
    
        """     
        products = Product.objects.all()[:10]  
        products = match_pictures_with_products( products, 10)  .  
        return render_to_response('products/product_list.html', {'products': products})
    


0 commentaires