1

私は進化的アルゴリズムを実験するためのパッケージをコーディングしていますが、言うまでもなく、多くの確率的手法が含まれています。ここで、このパッケージの (ドキュメント) テストをいくつか書きたいので、すべてが機能することを確認できます。私はおそらくこれに間違った方法でアプローチしているように感じますが、それでもこれについてのあなたの考えを聞きたいです.

たとえば、私のドキュメントテストには次のようなものがあります。

>>> a = Genome()
>>> b = Genome()
>>> a.mutate()
>>> a != b
True # Well, most of the time.

そのようなテストを実装すると、すべてが機能している間にテストが失敗することがあります。

テストを行う前に RNG シードを修正するという提案を読みましたが、テストには期待される結果が含まれている必要があるため、テストを作成するにすべてが機能することを確認する必要があります。

4

1 に答える 1

1

あなたはそれが失敗する確率を無視できるようにすることができます、例えば

a = Genome()
genomes = []
for i in range(100):
    b = Genome()
    b.mutate()
    genomes.append(b)
assert any(a != b for b in genomes)

元のテストがほとんどの場合成功した場合、これはすべての実用的な目的で常に成功します。

このテストは、一致することが許可されているゲノムの数に合理的な制限を課すこともできます。

おそらく、テストの読み取りは元のテストよりも劣ります。おそらく、ここではdoctestsを使用するのは間違ったアプローチであり、個別の単体テストを作成する必要があります。

于 2012-04-05T14:38:18.930 に答える