2017-06-21 6 views
1

私はいくつかのテストにhypothesisを使用しています。エッジケースを見つけるために多種多様なデータを生成できるのが好きです。しかし、私は少しだけ私のテストのいくつかを調整することができるようにしたいと思います。仮説を使用して特定のタイプのデータ(郵便番号や電話番号など)を生成できますか?

たとえば、integersを生成するテストを定義できますが、このテストが有効な郵便番号に一致することが期待されています。これはできますか?あるいは、おそらく、より複雑なものは、米国以外のすべての郵便番号に適合しますが、他のもの(カナダなど)はそうではありませんか?

ある種のマスク(すなわち、電子メールアドレス)に従うことが期待されるフィールドは、同じタイプのフィールドが有用であるでしょう。text

今私はこのように装飾されたテストケースがあります。この特定のケースでは

from hypothesis import given, strategies as st 
@given(st.integers()) 

を、私はそれはまた、米国の郵便番号規則に準拠したいと思います。

@given(st.text()) 

これは、電子メールのような形式のパターンを生成したいと考えています。

仮説はこの世代の世代を行うことができますか?

答えて

2

仮説はあなたが好きな世代のものを多かれ少なかれ作成できますが、組み込みの戦略がない場合は、通常は@compositeデコレータを使用して自分で作成する必要があります。 Here's an article from the site on how to do this sort of thing

具体的なケースの電子メールには、良い組み込み実装を提供するためのsome ongoing workがありますが、それはすぐに到着しないでしょう。

私は郵便番号のことを知らないし、それを正しく実行することは難しく見えますが、他のランダムジェネレータはおそらくst.integers(501, 99950).map(lambda i: "%05d" % (i,))で取得できます。ちょうど501〜99950の整数ですそれを5桁のコードとしてフォーマットします。