2

パッケージ仮説は、既知のタイプの入力引数に対してテストしたい場合に使用する戦略の豊富なセットを提供します。

次のクラスと、仮説を使用したその検定の 1 つを考えてみましょう。

from hypothesis.strategies import floats, integers, one_of
from hypothesis import given
import unittest

class A:
    def __init__(self, value=0):
        assert isinstance(value, (int, float))
        self.value = value

    @property
    def doubled(self):
        return self.value * 2


class Test_A(unittest.TestCase):

    @given(testval=one_of(floats(allow_infinity=False, allow_nan=False), integers()))
    def test_A_instantiation(self, testval):
        self.assertEqual(testval * 2, A(value=testval).doubled)


if __name__ == '__main__':
    unittest.main()

これは、提供された値が受け入れられた型であるかどうかを暗黙的にチェックし、self.double の計算が正しいかどうかを明示的にチェックします。

このテスト クラスは、少なくとも float または int 以外の入力タイプがチェックされていないため、不完全であると見なすことができます。そのためには、アサーション エラーが直接チェックされる別のテスト ケースが必要でした。たとえば、AssertRaises を使用します。

私の質問は、仮説検定の哲学でそれをどのように行うのですか?

仮説には「not_one_of」戦略、つまり「これとあれの型を除くすべての組み込み型」のようなものを定義できる戦略がないようです。これにより、選択するタイプの非常に長いリストを使用して「one_of」戦略を定義する可能性のみが残ります。

注: この全体的な状況は、ジュラシック パークの根本的な問題を思い出させます。彼らは恐竜の数が予想どおりかどうかを確認しましたが、それ以上かどうかは確認しませんでした。なので簡単な解決策はないと思いますが、昨日初めて仮説を立ててみたので私の知識不足かもしれません。

4

2 に答える 2