PyQCheck
PyQCheck publié à la fin du mois d'août de l'année dernière. Publié pour Python 2.7 tout le temps, et fait setup.py Je l'ai laissé dans le référentiel, donc Je pensais que c'était un gaspillage, alors j'ai pris les mesures suivantes.
Il n'a que des fonctionnalités médiocres, mais je pense qu'il peut être utilisé raisonnablement bien.
J'ai oublié les détails, mais la bibliothèque appelée QuickCheck s'est enthousiasmée dans une très petite zone à un certain endroit. Similaire à QuickCheck pour les personnes qui ont différentes langues préférées dans leurs langages de programmation préférés Je pense que c'est parce que j'ai créé un framework qui permet de tester.
En termes simples, il se comporte comme suit
--Créez votre propre fonction qui prend des arguments. --Entrez et exécutez une valeur qui garantit la plage qui peut être traitée pour cet argument et qui garantit le type.
L'environnement d'exploitation présente les conditions suivantes
--Python 3.3 ou supérieur doit être installé
Vous pouvez l'installer avec la commande suivante. ... Utilisez pyvenv pour préparer l'environnement d'installation afin d'éviter la pollution de l'environnement du système. Par exemple, supprimez distribuer et mettez easy_install pour préparer l'installation.
> mkdir ~/Sandbox/PyQCheck
> cd ~/Sandbox/PyQCheck
> pyvenv .venv
> source .venv/bin/activate
> curl -O http://python-distribute.org/distribute_setup.py
> python distribute_setup.py
> easy_install PyQCheck
C'est la fin de la préparation.
L'extrait de code de l'exemple d'opération est joint ci-dessous.
equal_length.py
# -*- coding:utf-8 -*-
from pyqcheck import PyQCheck, Arbitrary
def equal_length(a, b):
return len(a) == len(b)
PyQCheck(verbose=True).add(
Arbitrary(
('string', dict(min=10, max=10)),
('string', dict(min=10, max=10))
).property(
'len(a) == len(b)', equal_length
)
).run(10).result()
Lorsque vous l'exécutez, il sera affiché sous la forme suivante.
Pour la fonction à tester, comme traitement de l'argument automatique reçu par la fonction Générez de manière appropriée une valeur qui spécifie le type et la longueur de données pris en charge, etc. Passe-t-il correctement le test? Peut être vérifié. Essayez 100 fois, 1000 fois, 10000 fois, et si vous y allez, c'est probablement OK, Se sentir comme ça. (Bien que cela puisse être différent de l'idée originale de QuickCheck ...)
Vous pouvez également écrire à l'aide d'un décorateur.
equal_length.py
# -*- coding:utf-8 -*-
from pyqcheck import PyQCheck, set_arbitrary
@set_arbitrary(
('string', dict(min=10, max=10)),
('string', dict(min=10, max=10))
)
def equal_length(a, b):
'''
len(a) == len(b)
'''
return len(a) == len(b)
PyQCheck(verbose=True).run(10).result()
Je pense que cette façon d'écrire est plus propre ...
Vous pouvez également utiliser ce qui suit comme une utilisation inhabituelle de PyQCheck. Exécutons le script suivant. Pour l'exécution, Python3 doit être construit avec le lien avec sqlite3 activé.
insert_random_value_to_the_sqlite.py
# -*- coding:utf-8 -*-
import sqlite3
from pyqcheck import PyQCheck, set_arbitrary
DB_NAME = 'test.db'
@set_arbitrary(
('integer', dict(min=0, max=100)),
('string', dict(min=3, max=10))
)
def insert_to_sqlite3(age, name):
con = sqlite3.connect(DB_NAME)
cur = con.cursor()
cur.execute('''
SELECT `name` FROM `sqlite_master`
WHERE `type`='table' AND name='users';
''')
if cur.fetchone() is None:
cur.execute('''
CREATE TABLE `users` (
`id` INTEGER NOT NULL PRIMARY KEY,
`age` INTEGER NOT NULL,
`name` STRING NOT NULL
);
''')
con.commit()
cur.execute('''
INSERT INTO `users` (`age`, `name`)
VALUES (?, ?)
''', (age, name))
con.commit()
return True
PyQCheck(verbose=True).run(30).result()
Essayez de l'exécuter.
Puisque test.rb est créé dans le répertoire courant, jetons un œil au contenu ...
En utilisant la propriété de générer une valeur textuelle de PyQCheck et de la passer à une fonction, On dit qu'il a été utilisé pour générer des données factices. États américains, noms de pays du monde, Essayez de créer des données de prénom et de nom couramment utilisées comme arbitraires Si vous faites cela, je pense que cela peut être utilisé pour générer des données factices.
J'ai enregistré le package auprès de PyPI, je souhaite donc continuer la maintenance.
Recommended Posts