Hypothese ist eine Bibliothek, mit der Sie Unit-Tests effektiver schreiben können als Testfälle.
Es scheint, dass Sie eine Vielzahl von Werten ausprobieren können, die zum Testen verwendet werden. Dieses Mal möchte ich jedoch sehen, ob Beispieldaten mithilfe der Datengenerierungsfunktion der Hypothese einfach erstellt werden können.
Ich möchte Daten innerhalb eines festen Bereichs oder einer festen Grenze des Dateiformats (CSV) generieren.
Ich werde es versuchen!
Zunächst möchte ich die Daten definieren. Die Daten, für die Sie Hypothese erstellen möchten, sind [Strategie](https://hypothesis.readthedocs.io/en/latest/data.html#core -strategien) wird zur Definition verwendet.
Da diesmal die Standardbibliothek "csv" von Python verwendet wird, können Sie ein Diktat für DictWriter problemlos exportieren. Wenn Sie also ein Diktat erstellen, feste_Wörterbücher Es gibt eine Strategie namens "latest / data.html # hypothesis.strategies.fixed_dictionaries"), daher scheint dies auf diese Weise möglich zu sein.
Darunter können Sie den Schlüssel des Diktats eingeben, das Sie erstellen möchten, die Strategie zur Wertschöpfung festlegen und definieren!
from hypothesis import strategies as st
DictRowDataModel = st.fixed_dictionaries({
'k_id': st.none(),
'w_id': st.none(),
'Gegenstand 1': st.integers(min_value=1, max_value=7),
'Punkt 2': st.integers(min_value=1, max_value=5),
'Punkt 3': st.integers(min_value=1, max_value=16)
})
Das nächste, was schwer zu verstehen war, war, wie man damit Daten generiert. Es scheint, dass es kein Beispiel für diese Verwendung gibt, da sie normalerweise im Komponententest verwendet wird.
Beispiel für die Verwendung eines Testfalls:
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
Aber wenn ich danach suche, scheint es, dass die Strategie eine Methode von "example ()" hat, die verwendet werden kann:
import csv
from hypothesis import strategies as st
d = {
'k_id': st.none(),
'w_id': st.none(),
'Gegenstand 1': st.integers(min_value=1, max_value=7),
'Punkt 2': st.integers(min_value=1, max_value=5),
'Punkt 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)
Ich musste den Code für die Bereichsgenerierung nicht schreiben. glücklich.
Wenn Sie ".example ()" von "Strategie" verwenden, können Sie einfach CSV-Daten erstellen ~: tada:
Diese Warnung wird ausgegeben, wird jedoch vorerst erstellt, da Vorsichtsmaßnahmen wie die Testgeschwindigkeit getroffen werden. Vorerst ignorieren:
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