2016-10-10 10 views
-3

Comment écrire un test pour cela:Comment écrire un test unitaire pour une fonction qui retourne la chaîne aléatoire

def rand_fun(): 
    # return a random string 

Mon cas de test:

def test_rand_fun(): 
    # what to write here to check rand_fun 
    self.assertEqual(rand_fun(),'what should I write here ?') 
+4

Comment pouvons-nous vous aider si vous n'affichez pas le code réel de 'rand_fun'? –

+0

Vous ne pouviez pas être plus obscure! – Juggernaut

+0

il renvoie une chaîne qui est totalement aléatoire comme *** jilldfnwerbksdf415sdf2sdfsd *** .. le code est peu long c'est pourquoi je n'ai pas posté. –

Répondre

0

je serais tester cette façon:

def yourRandomFunction(): 
    return "a random string" 

if type(yourRandomFunction()) == type(''): 
    print "it is a string" 
else: 
    print "it is not a string" 

Une autre approche:

def yourRandomFunction(): 
    return "a random string" 

if isinstance(yourRandomFunction(), str) or isinstance(yourRandomFunction(), unicode): 
    print "yes it is a string" 
else: 
    print "no it is not a string" 
0

Vous pouvez utiliser random.seed() avant d'appeler rand_fun() dans le test, pour vous assurer qu'il renvoie une chaîne spécifique, mais cela dépend vraiment du code réel de rand_fun().

0

Tout d'abord, vous devez ajouter votre fonction de test dans une classe qui étend TestCase (je suppose que vous utilisez le test de django), et ajoutez l'importation

from django.test import TestCase 

au début de votre fichier. Sinon, vous pouvez importer unittest comme suit:

import unittest 

alors vous pouvez vous écrire la fonction de test (être conscient que chaque fonction de test doit commencer par le test du moût, exactement comme vous avez écrit dans votre extrait).

def test_rand_fun(self): 
    temp = rand_fun() 
    temp2 = rand_fun() 
    self.assertEqual(temp, temp2) 

Pour exécuter certains cas de test supplémentaires, a pris le fait que rand_fun retourne une chaîne aléatoire (selon votre algorithme, les chances que deux chaînes générées sont égaux doivent être très bas), vous pouvez génère aussi un nombre n de chaînes et vérifiez combien de chaînes sont égales afin de voir la probabilité d'avoir deux chaînes identiques

+0

Merci #roccoSenteta, Y at-il une méthode pour simplement passer mon cas de test lorsque rand_fun() toute valeur de chaîne. –

+0

Je n'ai pas bien compris ce que vous avez écrit. Que voulez-vous dire par "quand rand_fun() une valeur de chaîne" – roccoSenteta

+0

@RahulK et roccoSenteta: Je comprends ce qu'il veut dire, j'ai supprimé mon commentaire lol ..Il ne veut pas vérifier si la valeur retournée est aléatoire, il veut plutôt vérifier si c'est une chaîne. –

0

Vous ne pouvez pas vraiment tester le mécanisme qui fournit le caractère aléatoire pour votre fonction.

Si vous souhaitez tester la façon dont votre fonction utilise les informations aléatoires fournies, vous devez mocker sur le module/fonction du fournisseur aléatoire, et tester si votre fonction utilise les valeurs que vous lui avez données à la place.

Il y a beaucoup de bons articles sur cette approche. Résultat aléatoire d'une recherche google: https://www.toptal.com/python/an-introduction-to-mocking-in-python