J'essaie de configurer un script de notation pour une classe CS intro en utilisant unittest
. Essentiellement, les étudiants soumettent un fichier python student.py
, qui a un certain nombre de fonctions qui sont généralement interdépendantes (ce qui signifie que func3()
peut utiliser func1()
dans ses calculs).Supprimer/remplacer l'importation
J'écris des tests unitaires pour chaque méthode en comparant la sortie de student.func1
à la sortie de correct.func1
, une méthode qui est connue pour être la mise en œuvre correcte (à partir d'un fichier correct.py
).
À titre d'exemple, disons que func2
utilise func1
dans son calcul. Donc, soit par défaut ou sur student.func1
échouant à un test, je veux écraser student.func1
avec correct.func1
, alors student.func2
utilise une implémentation correcte connue (et n'est donc pas seulement faux par défaut). Comment pourrais-je faire ça? Il semble que les setUp()
et tearDown()
sont similaires à ce que je veux, mais je ne sais pas comment "désimporter" des modules en python, et je n'ai trouvé aucune ressource à ce sujet.
Je suis intéressé à la fois le cas où student.py
contient des classes et func1
, func2
sont des méthodes d'une classe spécifique, et quand func1
et func2
sont définis génériquement juste dans les student.py
.
Je dirais que remplacer les mauvaises fonctions par des fonctions correctes est une mauvaise chose en premier lieu. Si 'func2' repose sur' func1' et 'func1' est cassé d'une manière qui casse' func2', alors les étudiants devraient avoir remarqué que 'func2' a été cassé dans testing. De même, s'ils ont mal interprété la spécification de 'func1' et l'ont remarqué trop tard, mais que toutes leurs autres fonctions fonctionnent avec le comportement incorrect' func1', ils ne devraient pas avoir de points sur tout parce que vous avez remplacé leur fonction 'func1' par quelque chose leurs autres fonctions ne s'attendaient pas. – user2357112
@ user2357112 Je suis d'accord que ce n'est pas une idée parfaite, je pensais juste de le faire comme notre méthode de débogage pour trouver des erreurs est de remplacer le code brisé avec le code de travail connu jusqu'à ce que nous découvrons ce qui ne fonctionne pas. De plus, ce script ne sert pas à attribuer des notes, seulement pour aider à la notation manuelle (donc si tous les tests réussissent, tout indique que tout est parfait, si seulement func7' échoue, peut-être y chercher d'abord, etc.) – Mark