如何在假设中传递不同的数据类型值,以及如何在Python中检查返回类型和值是否正确

如何在假设中传递不同的数据类型值,以及如何在Python中检查返回类型和值是否正确,python,unit-testing,assert,hypothesis-test,python-hypothesis,Python,Unit Testing,Assert,Hypothesis Test,Python Hypothesis,使用假设模块在Python中执行单元测试的示例代码。 编写了简单的getTimeDelta函数来获取两个日期之间的时间差 要编写getTimeDelta函数的单元测试。使用假设模块获取多个日期时间值 问题是: 1.如何传递不同的数据类型值,即time1是str time2是datetime,不写多个函数吗 只检查返回值的数据类型,不检查实际结果是否正确。怎么做 如何检查项目的数据类型、结果元组的数据类型?主张 代码: 编辑01: 我们可以通过假设和策略来解决问题1 其中之一就是正确的方法 测试属

使用假设模块在Python中执行单元测试的示例代码。 编写了简单的getTimeDelta函数来获取两个日期之间的时间差

要编写getTimeDelta函数的单元测试。使用假设模块获取多个日期时间值

问题是: 1.如何传递不同的数据类型值,即time1是str time2是datetime,不写多个函数吗

只检查返回值的数据类型,不检查实际结果是否正确。怎么做

如何检查项目的数据类型、结果元组的数据类型?主张

代码:

编辑01:

我们可以通过假设和策略来解决问题1

其中之一就是正确的方法

测试属性的方法有很多,例如,但这里最简单的可能是测试oracle:只需将结果与已知的良好实现进行比较!否则,您可以检查timedelta是否为负/0/正,如果time1为lt/eq/gt time2-这基本上是一个较低的分辨率

你的辩护电话看起来对我有用

import unittest
from hypothesis import given
from hypothesis import strategies as st
import datetime
from dateutil.parser import parse as time_parse

def getTimeDelta(time1, time2):
    try:
        if isinstance(time1, str):
            time1 = time_parse(time1)
        if isinstance(time2, str):
            time2 = time_parse(time2)
        return (time1 - time2, {"message": ""})
    except Exception as err:
        return (False, {"message": "Exception {}".format(err)})

class TestTimeDeltaCalc(unittest.TestCase):
    def __init__(self, *args, **kwargs):
        super(TestTimeDeltaCalc, self).__init__(*args, **kwargs)
        self.utils = Utils()

    @given(st.datetimes(), st.datetimes())
    def test_time_delta(self, time1, time2):
        time_delta = getTimeDelta(time1, time2)
        if time_delta[0] is False:
            self.assertIsInstance(time_delta[0], bool)
        else:
            self.assertIsInstance(time_delta[0], datetime.timedelta)

        self.assertIsInstance(time_delta[1], dict)

    @given(st.text(), st.text())
    def test_time_delta(self, time1, time2):
        time_delta = getTimeDelta(time1, time2)
        if time_delta[0] is False:
            self.assertIsInstance(time_delta[0], bool)
        else:
            self.assertIsInstance(time_delta[0], datetime.timedelta)

        self.assertIsInstance(time_delta[1], dict)


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