hypothesis est une bibliothèque qui vous permet d'écrire des tests unitaires plus efficacement que des cas de test.
Il semble que vous puissiez essayer une large gamme de valeurs utilisées pour les tests. Cependant, cette fois, j'aimerais voir si des exemples de données peuvent être facilement créés en utilisant la fonction de génération de données d'hypothèse.
Je souhaite générer des données dans une plage ou une limite fixe de format de fichier (CSV).
J'essaierai!
Tout d'abord, je veux définir les données. Les données pour lesquelles vous souhaitez créer une hypothèse sont [stratégie](https://hypothesis.readthedocs.io/en/latest/data.html#core -strategies) est utilisé pour la définition.
Cette fois, puisque la bibliothèque standard csv
de python est utilisée, si vous créez un dict pour DictWriter, vous pouvez facilement l'écrire, donc lors de la création d'un dict, [fixed_dictionaries](https://hypothesis.readthedocs.io/en/ Il existe une stratégie appelée latest / data.html # hypothesis.strategies.fixed_dictionaries), donc cela semble être possible de cette façon.
Parmi eux, vous pouvez saisir la clé du dict que vous souhaitez créer, décider de la stratégie pour créer la valeur et la définir!
from hypothesis import strategies as st
DictRowDataModel = st.fixed_dictionaries({
'k_id': st.none(),
'w_id': st.none(),
'Objet 1': st.integers(min_value=1, max_value=7),
'Point 2': st.integers(min_value=1, max_value=5),
'Point 3': st.integers(min_value=1, max_value=16)
})
La prochaine chose qui était difficile à comprendre était comment l'utiliser pour générer des données. Il semble qu'il n'y ait pas d'exemple de cette utilisation car il semble être utilisé normalement dans le test unitaire.
Exemple d'utilisation de cas de test:
from hypothesis import given
import hypothesis.strategies as st
@given(st.integers(), st.integers())
def test_ints_are_commutative(x, y):
assert x + y == y + x
Mais quand je le cherche, il semble que la stratégie a une méthode de ʻexample () `qui peut être utilisée:
import csv
from hypothesis import strategies as st
d = {
'k_id': st.none(),
'w_id': st.none(),
'Objet 1': st.integers(min_value=1, max_value=7),
'Point 2': st.integers(min_value=1, max_value=5),
'Point 3': st.integers(min_value=1, max_value=16)
}
DictRowDataModel = st.fixed_dictionaries(d)
samples = 3
with open('sample.csv', 'w', encoding='utf8') as out:
writer = csv.DictWriter(out, fieldnames=tuple(d.keys()))
for i in range(samples):
sample = DictRowDataModel.example()
writer.writerow(sample)
Je n'ai pas eu à écrire le code pour la génération de plage. heureux.
Si vous utilisez .example ()
de strategy
, vous pouvez facilement créer des données CSV ~: tada:
Cet avertissement sera émis, mais il est créé pour le moment car il s'agit de précautions telles que la vitesse de test. Ignorer pour l'instant:
NonInteractiveExampleWarning: The `.example()` method is good for exploring strategies, but should only be used interactively. We recommend using `@given` for tests - it performs better, saves and replays failures to avoid flakiness, and reports minimal examples. (strategy: fixed_dictionaries(...),
Recommended Posts