Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用假设的python测试_Python_Python Unittest_Python Hypothesis - Fatal编程技术网

使用假设的python测试

使用假设的python测试,python,python-unittest,python-hypothesis,Python,Python Unittest,Python Hypothesis,如果要针对已知类型的输入参数进行测试,包假设提供了一套丰富的策略 考虑以下类别及其使用假设的测试之一: 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))

如果要针对已知类型的输入参数进行测试,包假设提供了一套丰富的策略

考虑以下类别及其使用假设的测试之一:

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

我的问题是:在假设检验哲学中,你是如何做到这一点的

假设似乎没有“非一个”策略,也就是说,你可以定义“除了这个和那个类型之外的所有内置类型”。这只留下了定义一个“一套”策略的可能性,其中有一长串类型可供选择


注意:整个情况让我想起了侏罗纪公园的根本问题,当时他们检查了恐龙的数量是否达到了预期,但从未检查过恐龙的数量是否超过预期。因此,我不认为没有简单的解决方案,但我昨天首先尝试了假设,所以这可能是我缺乏知识。

测试上述案例永远不可能完成,特别是因为主要的要点是测试断言。因此,如上所述,断言失败的单一测试应该足够了。

另一种选择是使用。然后,您可以生成
任何
对象,并过滤掉不需要的情况。由于您将只过滤一小部分,因此仍将执行此测试。

这样的测试永远无法完成。我会考虑一个单一的测试与任何其他输入足够。特别是因为您正在测试aássert isinstance`公平点:isinstance基本上排除了所有其他类型,并涵盖了所有情况。。。如果正确定义了类型,那么还应该测试哪些类型,对吗?但我想我明白了:那就像测试内置断言一样。因此,我们可以说上面的测试用例或多或少是正确的和足够的?我会添加一个测试,您可以使用一个字符串而不是int和float进行测试,这样一个单独的测试用例assert应该失败。这是我在第一次遇到假设之前组织测试的方式。我想我只需要在心理上适应假设的可能性以及在哪里使用它们。你愿意写一个答案成为被接受的答案,还是我来做?