Python unittest cher avec le programme d'installation
Mon fichier de test est fondamentalement:
class Test(unittest.TestCase):
def testOk():
pass
if __name__ == "__main__":
expensiveSetup()
try:
unittest.main()
finally:
cleanUp()
Cependant, je souhaite lancer mon test par Netbeans outils de test, et pour ce faire j'ai besoin de unittests qui ne reposent pas sur une configuration de l'environnement effectuée dans principal. En regardant Mise en cache de résultat de setUp() à l'aide de Python unittest - il recommande l'utilisation de Nez. Cependant, je ne pense pas que Netbeans supporte. Je n'ai trouvé aucune information indiquant qu'il n'. En outre, je suis le seul ici à écrire des tests, donc je ne veux pas d'introduire des dépendances supplémentaires pour les 2 autres développeurs, sauf s'ils sont nécessaires.
Comment puis-je faire l'installation et le nettoyage une fois pour tous les tests dans mon TestSuite?
Le coûteux programme d'installation ici est de créer des fichiers avec des données factices, ainsi que la mise en place et la démolition d'un simple serveur xml-rpc. J'ai aussi 2 classes de test, un test en local et un test de toutes les méthodes xml-rpc.
- Double Possible de Unittest réglage/démontage pour plusieurs tests
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez Python >= 2.7 (ou unittest2 pour Python >= 2.4 & <= 2.6), la meilleure approche consisterait à utiliser des
pour effectuer certaines d'initialisation une fois pour tous les tests appartenant à la classe donnée.
Et pour effectuer le nettoyage, utiliser:
Voir aussi la unittest de la bibliothèque standard documentation sur setUpClass et tearDownClass classmethods.
C'est ce que je fais:
Malheureusement (parce que je ne veux que mes tests pour être indépendant et déterministe), je le fais beaucoup (parce que le système de tests en moins de 5 minutes sont également importants).
Tout d'abord, ce que S. Lott dit. Toutefois!, vous ne voulez pas le faire. Il ya une raison pour l'installation et le démontage sont enroulé autour de chaque test: ils aident à préserver le déterminisme de l'essai.
Sinon, si certains test met le système en mauvais état, votre prochaine tests peuvent échouer. Idéalement, chacun de vos tests doivent être indépendants.
Aussi, si vous insistez sur le faire de cette façon, au lieu d'écrire à la main soi-même.runTest1(), self.runTest2(), vous souhaiterez peut-être faire un peu d'introspection afin de trouver les méthodes pour exécuter.
Ne le paquet au niveau de l'initialisation de le faire pour vous? À partir de la Nez Wiki:
Vous pouvez enregistrer l'état si
expensiveSetup()
est exécuté ou non.Ou une sorte de variation de la présente. Peut-être que le ping serveur xml-rpc et en créer un nouveau si ce n'est pas de répondre.
Mais l'unité de test de manière autant que je sache est à l'installation et le démontage par unittest même si elle est coûteuse.
Je ne sais rien à propos de Netbeans, mais j'ai pensé que je devrais mentionner zope.lanceur de et c'est un soutien pour une chouette chose: les Couches. Fondamentalement, vous ne le testsetup dans des classes séparées, et d'attacher ces classes pour les tests. Ces classes peuvent hériter les uns des autres, formant une couche de configurations. Le lanceur n'aura alors qu'à appeler chaque installation une fois, et l'enregistrement de l'état de la mémoire, et au lieu de mettre en place et à la déchirure en bas, il suffira juste de copier le calque contexte de l'installation.
Ce qui accélère la configuration de test beaucoup, et est utilisée lorsque vous testez des produits Zope et Plone, où la testsetup souvent besoin de vous pour démarrer un serveur CMS Plone, créer un site Plone et ajouter des charges de contenu, un processus qui peut prendre jusqu'à une demi-minute. Faire cela pour chaque méthode de test est évidemment impossible, mais avec des couches, il est effectué une seule fois. Cela raccourcit la durée de l'installation d'essai et protège les méthodes de test les uns des autres, et signifie donc que le test continue à être determenistic.
Donc je ne sais pas de zope.lanceur de travail pour vous, mais il vaut la peine d'essayer.
Vous pouvez assurer
setUp
ettearDown
exécuter une fois si vous avez une seule méthode de test,runTest
. Cette méthode peut faire tout ce qu'elle veut. Juste être sûr que vous n'avez pas toutes les méthodes dont les noms commencent partest
.Il n'a pas magiquement comprendre ce qu'il faut exécuter. Si vous ajoutez une méthode de test, vous devez également mettre à jour runTest.