J'ai besoin d'écrire des cas de test à l'aide d'un test d'unité dans Python pour tester la création de cercle.
Définissez une classe Définir une méthode de classe Remplissez la définition de la classe définir la méthode de test de définir la méthode de test définir la méthode de test définir la méthode de test J'ai essayé ci-dessous, mais cela échoue avec une erreur comme p> le code: p> Cercle code> avec la méthode __ init __ code> qui initialise un cercle avec attribut radius code>, ayant suivi des restrictions suivantes: p>
rayon code> doit être une valeur numérique, si ce n'est pas une erreur de type avec le message d'erreur "Le rayon doit être un numéro". P>
li>
rayon code> doit être compris entre 0 et 1000 inclus des deux côtés, si ce n'est pas une erreur de valeur avec le message d'erreur "Le rayon doit être compris entre 0 et 1000 inclus" P>
li>
zone code> et circonférence code> qui doit renvoyer des valeurs arrondies à 2 décimales. P>
li>
ul>
testcirclecreation code> qui teste le comportement de __ init __ code> méthode comme spécification ci-dessous. P>
li>
test_creature_circle_with_numerical_radius code> qui crée du cercle avec le rayon 2.5 et vérifiez si le rayon correspond à la valeur 2.5 p>
li>
test_creature_circent_with_negative_radius_with_negative_radius code> Qui vérifie si l'exception d'erreur de valeur est soulevée avec le message d'erreur "Le rayon doit être compris entre 0 et 1000 inclus", tout en créant un cercle de rayon 2.5. p>
li>
test_creating_circlele_with_greaterthan_radius code> QUELLE vérifie si ValueError code> est soulevé avec le message d'erreur "Le rayon doit être compris entre 0 et 1000 incluse", tout en créant un cercle de cercle de rayon 1000.1. p>
li>
test_creating_circle_with_nonnumeric_radius code>, qui vérifie si typeError code> est soulevé avec un message d'erreur "Douius doit être numéro" tout en créant un cercle de "Bonjour" . p>
li>
ul> import inspect
import re
import unittest
import math
# Define below the class 'Circle' and it's methods with proper doctests.
class Circle:
def __init__(self, radius):
# Define the initialization method below
try:
if not isinstance(radius, (int, float)):
raise TypeError
elif 1000 >=radius>=0:
self.radius=radius
else:
raise ValueError
except ValueError:
raise ValueError("radius must be between 0 and 1000 inclusive")
except TypeError:
raise TypeError("radius must be a number")
def area(self):
# Define the area functionality below
y=math.pi*(self.radius**2)
return round(y,2)
def circumference(self):
# Define the circumference functionality below
x=math.pi*2*self.radius
return round(x,2)
class TestCircleCreation(unittest.TestCase):
def test_creating_circle_with_numeric_radius(self):
# Define a circle 'c1' with radius 2.5 and check if
# the value of c1.radius equal to 2.5 or not
c1=Circle(2.5)
self.assertEqual(c1.radius,2.5)
def test_creating_circle_with_negative_radius(self):
# Try Defining a circle 'c' with radius -2.5 and see
# if it raises a ValueError with the message
# "radius must be between 0 and 1000 inclusive"
c=Circle(-2.5)
self.assertEqual(c.radius,-2.5)
self.assertRaises(ValueError)
def test_creating_circle_with_greaterthan_radius(self):
# Try Defining a circle 'c' with radius 1000.1 and see
# if it raises a ValueError with the message
# "radius must be between 0 and 1000 inclusive"
c=Circle(1000.1)
self.assertEqual(c.radius,1000.1)
self.assertRaises(ValueError)
def test_creating_circle_with_nonnumeric_radius(self):
# Try Defining a circle 'c' with radius 'hello' and see
# if it raises a TypeError with the message
# "radius must be a number"
c=Circle('hello')
self.assertEqual(c.radius,'hello')
self.assertRaises(TypeError)
if __name__ == '__main__':
fptr = open('output.txt', 'w')
runner = unittest.TextTestRunner(fptr)
unittest.main(testRunner=runner, exit=False)
fptr.close()
with open('output.txt') as fp:
output_lines = fp.readlines()
pass_count = [ len(re.findall(r'\.', line)) for line in output_lines if line.startswith('.')
and line.endswith('.\n')]
pass_count = pass_count[0]
print(str(pass_count))
doc1 = inspect.getsource(TestCircleCreation.test_creating_circle_with_numeric_radius)
doc2 = inspect.getsource(TestCircleCreation.test_creating_circle_with_negative_radius)
doc3 = inspect.getsource(TestCircleCreation.test_creating_circle_with_greaterthan_radius)
doc4 = inspect.getsource(TestCircleCreation.test_creating_circle_with_nonnumeric_radius)
assert1_count = len(re.findall(r'assertEqual', doc1))
print(str(assert1_count))
assert1_count = len(re.findall(r'assertEqual', doc2))
assert2_count = len(re.findall(r'assertRaises', doc2))
print(str(assert1_count), str(assert2_count))
assert1_count = len(re.findall(r'assertEqual', doc3))
assert2_count = len(re.findall(r'assertRaises', doc3))
print(str(assert1_count), str(assert2_count))
assert1_count = len(re.findall(r'assertEqual', doc4))
assert2_count = len(re.findall(r'assertRaises', doc4))
print(str(assert1_count), str(assert2_count))
4 Réponses :
J'ai supprimé répété dans votre code, le J'ai modifié vos tests pour utiliser la gestion de contexte pour attraper les exceptions levées qui ont fait fonctionner correctement les tests p> bien que cela aurait également travaillé: p> ps: je vous conseille d'utiliser self.assertequal (c.radius, -2.5) code> assertions telles qu'elles sont déjà traitées par un autre test d'unité ( test_créat_circle_with_numeric_radius (auto) code>) et causent vos instances d'échec. Voir ici, par exemple: Assertequals (c.radius, -2.5) code> tente de déterminer si la valeur c.radius est égal à -2,5. Cette valeur n'est pas définie, car -2.5 code> est en dehors de la plage acceptable et une ValueError est lancée à la place. Cela empêche le Self.AssorTraises (ValueError) Code> d'être vérifié. En supprimant Assertequals code> dans les tests et en le laissant comme il est propre test indépendant, self.assertraises (ValueError) code> s'exécute et vous permet de voir où votre code n'adhère pas aux exigences . P> avec Ouvrir code> lors de l'écriture dans le fichier, comme vous l'avez fait lors de la lecture. P > if not isinstance(radius, (int, float)):
raise TypeError("radius must be a number")
if not 1000 >=radius>=0:
raise ValueError("radius must be between 0 and 1000 inclusive")
self.radius=radius
Je reçois la réponse comme 4 1 0 1 0 1 0 1 Mais c'est toujours dit que votre réponse est incorrecte, il a trois chèques pour Assertequal où les exceptions sont soulevées, on dirait que cela provoque le problème s'il vous plaît suggérer.
Qu'est-ce qui dit que la réponse est incorrecte? Qu'est-ce que trois vérifications asserqual?
Dans la question ci-dessus, ASSERT_COUT1 pour DOC2, DOC3, DOC4 s'attend à ce que l'Assertequal comptage.
Le premier paragraphe indique que les vérifications d'assises ont été supprimées, laissant uniquement la vérification indépendante. J'ai maintenant ajouté plus de détails pour expliquer cela.
import inspect
import re
import unittest
import math
# Define below the class 'Circle' and it's methods with proper doctests.
class Circle:
def __init__(self, radius):
# Define the initialization method below
try:
if not isinstance(radius, (int, float)):
raise TypeError
elif 1000 >=radius>=0:
self.radius=radius
else:
raise ValueError
except ValueError:
raise ValueError("radius must be between 0 and 1000 inclusive")
except TypeError:
raise TypeError("radius must be a number")
def area(self):
# Define the area functionality below
y=math.pi*(self.radius**2)
return round(y,2)
def circumference(self):
# Define the circumference functionality below
x=math.pi*2*self.radius
return round(x,2)
class TestCircleCreation(unittest.TestCase):
def test_creating_circle_with_numeric_radius(self):
# Define a circle 'c1' with radius 2.5 and check if
# the value of c1.radius equal to 2.5 or not
c1 = Circle(2.5)
self.assertEqual(c1.radius, 2.5)
def test_creating_circle_with_negative_radius(self):
# Try Defining a circle 'c' with radius -2.5 and see
# if it raises a ValueError with the message
# "radius must be between 0 and 1000 inclusive"
c1 = Circle(2.5)
self.assertEqual(c1.radius, 2.5)
with self.assertRaises(ValueError) as E:
c = Circle(-2.5)
def test_creating_circle_with_greaterthan_radius(self):
# Try Defining a circle 'c' with radius 1000.1 and see
# if it raises a ValueError with the message
# "radius must be between 0 and 1000 inclusive"
c1 = Circle(2.5)
self.assertEqual(c1.radius, 2.5)
with self.assertRaises(ValueError) as E:
c = Circle(1000.1)
def test_creating_circle_with_nonnumeric_radius(self):
# Try Defining a circle 'c' with radius 'hello' and see
# if it raises a TypeError with the message
# "radius must be a number"
c1 = Circle(2.5)
self.assertEqual(c1.radius, 2.5)
with self.assertRaises(TypeError) as E:
c = Circle('hello')
if __name__ == '__main__':
fptr = open('output.txt', 'w')
runner = unittest.TextTestRunner(fptr)
unittest.main(testRunner=runner, exit=False)
fptr.close()
with open('output.txt') as fp:
output_lines = fp.readlines()
pass_count = [ len(re.findall(r'\.', line)) for line in output_lines if line.startswith('.')
and line.endswith('.\n')]
pass_count = pass_count[0]
print(str(pass_count))
doc1 = inspect.getsource(TestCircleCreation.test_creating_circle_with_numeric_radius)
doc2 = inspect.getsource(TestCircleCreation.test_creating_circle_with_negative_radius)
doc3 = inspect.getsource(TestCircleCreation.test_creating_circle_with_greaterthan_radius)
doc4 = inspect.getsource(TestCircleCreation.test_creating_circle_with_nonnumeric_radius)
assert1_count = len(re.findall(r'assertEqual', doc1))
print(str(assert1_count))
assert1_count = len(re.findall(r'assertEqual', doc2))
assert2_count = len(re.findall(r'assertRaises', doc2))
print(str(assert1_count), str(assert2_count))
assert1_count = len(re.findall(r'assertEqual', doc3))
assert2_count = len(re.findall(r'assertRaises', doc3))
print(str(assert1_count), str(assert2_count))
assert1_count = len(re.findall(r'assertEqual', doc4))
assert2_count = len(re.findall(r'assertRaises', doc4))
print(str(assert1_count), str(assert2_count))
Essayez ceci, vous obtiendrez 4 1 1,1 1,1 1,1
import inspect
import re
import unittest
import math
class Circle:
def __init__(self, radius):
# Define the initialization method below
self.radius=radius
if not isinstance(self.radius,(int,float)):
raise TypeError("radius must be a number")
elif(self.radius>1000 or self.radius<0):
raise ValueError("radius must be between 0 and 1000 inclusive")
else:
pass
def area(self):
# Define the area functionality below
return math.pi*(self.radius**2)
def circumference(self):
return 2*math.pi*self.radius
# Define the circumference functionality below
class TestCircleCreation(unittest.TestCase):
def test_creating_circle_with_numeric_radius(self):
# Define a circle 'c1' with radius 2.5 and check if
# the value of c1.radius equal to 2.5 or not
c1=Circle(2.5)
self.assertEqual(c1.radius,2.5)
def test_creating_circle_with_negative_radius(self):
# Try Defining a circle 'c' with radius -2.5 and see
# if it raises a ValueError with the message
# "radius must be between 0 and 1000 inclusive"
with self.assertRaises(ValueError) as e:
c=Circle(-2.5)
self.assertEqual(str(e.exception),"radius must be between 0 and 1000 inclusive")
def test_creating_circle_with_greaterthan_radius(self):
# Try Defining a circle 'c' with radius 1000.1 and see
# if it raises a ValueError with the message
# "radius must be between 0 and 1000 inclusive"
with self.assertRaises(ValueError) as e:
c=Circle(1000.1)
self.assertEqual(str(e.exception),"radius must be between 0 and 1000 inclusive")
def test_creating_circle_with_nonnumeric_radius(self):
# Try Defining a circle 'c' with radius 'hello' and see
# if it raises a TypeError with the message
# "radius must be a number"
with self.assertRaises(TypeError) as e:
c=Circle("hello")
self.assertEqual(str(e.exception),"radius must be a number")
if __name__ == '__main__':
fptr = open('output.txt', 'w')
runner = unittest.TextTestRunner(fptr)
unittest.main(testRunner=runner, exit=False)
fptr.close()
with open('output.txt') as fp:
output_lines = fp.readlines()
pass_count = [ len(re.findall(r'\.', line)) for line in output_lines if line.startswith('.')
and line.endswith('.\n')]
pass_count = pass_count[0]
print(str(pass_count))
doc1 = inspect.getsource(TestCircleCreation.test_creating_circle_with_numeric_radius)
doc2 = inspect.getsource(TestCircleCreation.test_creating_circle_with_negative_radius)
doc3 = inspect.getsource(TestCircleCreation.test_creating_circle_with_greaterthan_radius)
doc4 = inspect.getsource(TestCircleCreation.test_creating_circle_with_nonnumeric_radius)
assert1_count = len(re.findall(r'assertEqual', doc1))
print(str(assert1_count))
assert1_count = len(re.findall(r'assertEqual', doc2))
assert2_count = len(re.findall(r'assertRaises', doc2))
print(str(assert1_count), str(assert2_count))
assert1_count = len(re.findall(r'assertEqual', doc3))
assert2_count = len(re.findall(r'assertRaises', doc3))
print(str(assert1_count), str(assert2_count))
assert1_count = len(re.findall(r'assertEqual', doc4))
assert2_count = len(re.findall(r'assertRaises', doc4))
print(str(assert1_count), str(assert2_count))
class Circle:
def __init__(self, radius):
# Define initialization method:
self.radius = 0
if not isinstance(radius,(int,float)):
raise TypeError("radius must be a number")
elif radius < 0 or radius > 1000:
raise ValueError("radius must be between 0 and 1000 inclusive")
else:
self.radius = radius
def area(self):
# Define area functionality:
return round(math.pi*(self.radius**2),2)
def circumference(self):
# Define circumference functionality:
return round(2*math.pi*self.radius)
class TestCircleCreation(unittest.TestCase):
def test_creating_circle_with_numeric_radius(self):
# Define a circle 'c1' with radius 2.5, and check if
# the value of c1.radius is equal to 2.5 or not.
c1 = Circle(2.5)
self.assertEqual(c1.radius, 2.5)
def test_creating_circle_with_negative_radius(self):
# Define a circle 'c' with radius -2.5, and check
# if it raises a ValueError with the message
# "radius must be between 0 and 1000 inclusive".
with self.assertRaises(ValueError) as e:
c = Circle(-2.5)
self.assertEqual(str(e.exception),"radius must be between 0 and 1000 inclusive")
def test_creating_circle_with_greaterthan_radius(self):
# Define a circle 'c' with radius 1000.1, and check
# if it raises a ValueError with the message
# "radius must be between 0 and 1000 inclusive".
with self.assertRaises(ValueError) as e:
c = Circle(1000.1)
self.assertEqual(str(e.exception),"radius must be between 0 and 1000 inclusive")
def test_creating_circle_with_nonnumeric_radius(self):
# Define a circle 'c' with radius 'hello' and check
# if it raises a TypeError with the message
# "radius must be a number".
with self.assertRaises(TypeError) as e:
c = Circle("hello")
self.assertEqual(str(e.exception), "radius must be a number")