在假设函数中执行数据库查询时,列表索引超出范围

时间:2019-05-01 10:44:42

标签: python python-2.7 testing hypothesis-test python-hypothesis

我正在使用Python假设来为数据库编写随机测试。 在将给定值插入表的1-2个循环后,我得到了超出范围的列表索引,并使用@seed进行了复制。 没有什么可以失败的,我还没有断言。 我该如何调试?

谢谢

        run_statement("create table t (x int)")
        @given(st.integers(1,10), st.integers(1,10))
        def insert_select(x):
            assume(x)
            run_statement("insert into t values ({})".format(x))
            select_results = run_statement_with_results("select * from t")
            print select_results

        insert_select()

结果:

You can add @seed(257907719204305935240373390472712621009) to this test to reproduce this failure.
timeout
error: list index out of range

1 个答案:

答案 0 :(得分:0)

不幸的是,该测试从根本上被打破了:

  • 您要在测试用例的执行之间共享数据库状态,绝不能发生,否则测试将无法再现。
  • 您要为@given提供两个参数,但是test函数仅接受一个。
  • assume(x)的调用是毫无意义的,因为x永远不会是虚假的

这些问题一旦解决,问题就可能消失。