。
QCはをタップ&あなたが当てはまる、とこれらのプロパティが実際に保持することを確認するために、コンピュータがランダム化されたテストケースを生成させることを期待しプロパティを書き込むことができますテストツールです。たとえば、あなたが圧縮を書かれたとする機能を解凍している場合いくつかのデータ圧縮プログラム、テストには明らかなプロパティは、文字列を圧縮して解凍すると、元の文字列をバック与えることである。ここではあなたがそれを表現できる方法は次のとおりです。
輸入ユニットテスト
輸入QC
クラスTestCompression(unittest.TestCaseの):
  @ qc.property
 デフtest_compress_decompress(自己):
  "" "オリジナルデータを圧縮してリターンを解凍することをテストします。" ""
 データ= qc.str()#任意の文字列。値がランダム化される。
とをタップ; self.assertEqual(データは、解凍(圧縮(データ))のrepr(データ))
つまり、(そんなに決まり文句があるの理由です)Pythonの組み込みのユニットテストフレームワークと通常のテストです。別の方法として、最小限の詳細な、非常に快適な鼻のように、別のテストフレームワークとまったく同じことを行うことができます。 @のqc.propertyデコレータは装飾された機能を数回実行し、値が(qc.stringのような関数によって返された各時間)が異なる。言い換えれば、QuickCheckをはそこにほとんどすべてのユニットテストフレームワークと互換性があります。それは特に厳しいではありません。
qc.strような関数は、()、qc.int()など、特定のタイプの任意の値を生成する。上記の例では、プロパティはすべての文字列にも当てはまると主張している。あなたがテストを実行すると、QuickCheckをテスト用のランダム化文字列を生成します。
あなたは、私は、「無作為化」「ランダム」ではないと述べていることに気づくでしょう。これは意図的なものです。値の分布が興味深い空の文字列のような値、または中央にNUL文字を含む文字列、または英語のテキストを含む文字列が含まれるように微調整されている。一般的には、QuickCheckをは巧妙なトリッキーな値と乱数の良いミックスを与えることを試みます。あなたはそれを行う必要がないことを除いて、手で実際に徹底したテストケースを書かなければならなかった場合、これは、あなたがどうなるのか、本質的である。実際には、コンピュータはSANE、データを構成しているかについて、より少ない先入観を持っているので、それは多くの場合のためのテストケースを書くためにあなたに起こったことはなかっただろうバグを見つけるでしょう。それは無意識のうちにバグを回避する方法を知りません。
あなたは組み込みの任意の値機能に限定されることはありません。あなた自身を生成するために、ブロックを構築するようにそれらを使用することができます。例えば:
クラスPoint(オブジェクト):
 デフ__init __(自己、X、Y):
  self.x、self.y =フロート(x)は、フロート(y)の
デフポイント():
  "" "任意の点を取得します。" ""
  X = qc.int(-20、20)
  Y = qc.int(-34、50)
 点(x、y)を返す
その後、プロパティで任意の点値を生成するためにこれを使用することができます。ここで鼻スタイルのテストです:
@ qc.property
DEF test_triangle_inequality():
  PT =ポイント()
  ABS(pt.x)+ ABSをアサート(pt.y)> = math.sqrt(pt.x ** 2 + pt.y ** 2)、(pt.x、pt.y)
これを実行すると、魔法のような何かが起こる:あなたは(0、0)、(1,1)、(のようなポイントが表示されますので、QuickCheckをは、一緒に、Pointクラスでxとyの両方の変数のトリッキーな値を生成しようとします0、1)、(385904、0)、並びに(584、-35809648)のような完全にランダムなもの。言い換えれば、それだけでいくつかの微妙な値を持つ乱数のストリームからx、yの値を描画するのではなく、QuickCheckを、実際にはx、y座標のトリッキーな組み合わせを生成しよう。
任意のデータを取得するための機能の
- (ロー、ハイ)INTはローとハイオプションの境界との間で、int型を提供します。
- 長い(低、高)は、低域と高オプションの境界との間で、long型を提供します。
- (ロー、ハイ)フロートは低く、高いオプションの境界との間で、フロートを与えます。いいえ無限大またはNaN値はありません。
  STR(長さ=なし、maxlenを=なし)タイプSTRの文字列を与えます。エンコーディングはUTF-8です。長さが指定されている場合、文字列は正確に長くなります。 MAXLENが与えられた場合、文字列の長さは、最大のmaxlen文字になります。
- ユニコード(長さ=なし、maxlenを=なし)タイプのUnicodeのUnicode文字列を、提供します。長さが指定されている場合、文字列は正確に長くなります。 MAXLENが与えられた場合、文字列の長さは、最大のmaxlen文字になります。
- 名前()はUnicodeで、名前を与えます。基本多言語面外の非改行スペース、または電子メールアドレス、またはUnicode文字を含む名前 - エキゾチックに「ジョン·スミス」のような、平凡なからのこれらの範囲、。どちらかといえば、これは、あなたがインターネットデータの十分に大きなセットで表示されます名前よりも少ないあまのじゃくです。
- 。nameUtf8()(名前と同じです)( 'UTF8')をコードする。
- ないfromlist(項目)は、リストからランダムにアイテムを返します。これはあなた自身の任意のデータ·ジェネレータ関数を作成するための主に有用です。
- randstr(長さ=なし、MAXLEN = sys.maxintに)ランダムバイトの文字列を与えます。長さが指定されている場合、文字列は正確に長くなります。 MAXLENが与えられた場合、文字列の長さは、バイトMAXLEN高々となります。
STRとUnicodeで生成文字列がランダム化されますが、いくつかの努力は、文字列処理コードの全体の多くのバグを明らかに、それらに十分にあまのじゃく作り化されている。名前のリストが緩くそれは世界が狂っていることをこれまで以上に明確になったように、何度も何度も繰り返し、実世界のデータに名前処理コードのクラッシュを見ての恐ろしい思い出に基づいており、私たちは本当に運命にある。 (この感覚は、あなたが十分なテストカバレッジと物事を得れば、最終的にクラッシュ停止に渡します。希望があります!)
qc.arbitrary内の名前と文字列の例のデータは、よりdeteministicテストケースデータのソースとして興味深いものになることがあります。それのいずれかを借りてお気軽に。内部は魔法ですが、魔法の内部の部分から、最も興味深いものはqc.arbitraryとQCにあります。
の要件の:ます。
- のPythonます。
コメントが見つかりません