生成在假设中不重复的唯一ID

时间:2018-05-14 18:59:11

标签: python-hypothesis

我希望生成一个不重复的唯一ID。我试图使用st.uuids()

这是我的代码

class MyTest(<class that inherits from unittest.TestCase>)
  @hypothesis.seed(0)
  @hypothesis.settings(derandomize=True)
  @hypothesis.setting(use_coverage=False)
  @hypothesis.given(st.uuids())
  def test(self, test_id):
    logging.info('test_id %s', test_id)
    logging.info('self.ids %s', self.ids)
    if test_id in self.ids:
      logging.info('SHOULD NOT BE HERE')
    else:
      logging.info('HAPPY')
      self.ids.append(test_id)

但是,我重复1次。关于如何避免重复的任何提示?

  

test_id 5bc8fbbc-bde5-c099-4164-d8399f767c45

     

self.ids [UUID(&#39; e3e70682-c209-4cac-629f-6fbed82c07cd&#39;),   UUID(&#39; 1ee77147-c7be-894d-5073-79c36d3c338d&#39),   UUID(&#39; 734007f9-e3b1-3a59-bac6-78e47a6e8c0f&#39),   UUID(&#39; 97343ee7-03f6-c7c0-d787-3a75e0040c6d&#39),   UUID(&#39; 12193edd-6aac-c6b6-8caf-d66c89075de6&#39),   UUID(&#39; ea37c9e0-a3f9-3fe5-0b68-afbaab69828e&#39),   UUID(&#39; e13a37b0-f328-3835-4a40-cfc1142acbf7&#39),   UUID(&#39; 36a3a379-28ca-876f-6b68-1fc4502323be&#39),   UUID(&#39; cbf97494-2dae-a0f6-43a5-5203d7fdc239&#39),   UUID(&#39; 94012b2d-1221-006b-266C-7dcefecc417e&#39),   UUID(&#39; e05fccb4-9d81-b03f-4f0c-7c859a0af299&#39),   UUID(&#39; c6148cd8-b446-bc4f-7fea-3b29b7b93ee5&#39),   UUID(&#39; cd613e30-d8f1-6adf-91b7-584a2265b1f5&#39),   UUID(&#39; d95bafc8-f2a4-d27b-dcf4-bb99f4bea973&#39),   UUID(&#39; 5af6e118-6344-2432-9707-6fb276cfc8bf&#39),   UUID(&#39; c1a4bbe2-f5bc-斋-3a7c-be792b90ac94&#39),   UUID(&#39; 01457085-dc53-6b6a-b47f-3aefd7768cc6&#39),   UUID(&#39; 6beb5a8d-f4b1-3663-a3e3-c900e848b602&#39),   UUID(&#39; 21636369-8b52-9b4a-97b7-50923ceb3ffd&#39),   UUID(&#39; b8a1abcd-1a69-16c7-4da4-f9fc3c6da5d7&#39),   UUID(&#39; 5bc8fbbc-bde5-c099-4164-d8399f767c45&#39)]

     

不应该在这里

奇怪的是,我可以在日志语句的正上方看到该ID。

我想知道@cacheable或@defines_strategy_with_reusable_values是否与它有关 https://github.com/HypothesisWorks/hypothesis/blob/cedbafe52934e5f710be41c51044388ef3047850/hypothesis-python/src/hypothesis/strategies.py#L1868

1 个答案:

答案 0 :(得分:1)

在测试中不会重复的唯一ID。然而,假设可能试图在测试的许多单独迭代中将任何特定值作为输入传递 - 如果不这样,就不可能检测到条纹,并且许多常见错误将更难以找到。

您应确保您的测试未设置或取决于任何外部可变状态,或使用setup_exampleteardown_example方法进行适当清理。

这是收缩和示例生成的基本不变量。