当前位置: 代码迷 >> python >> Python3.6和单例-用例和并行执行
  详细解决方案

Python3.6和单例-用例和并行执行

热度:113   发布时间:2023-06-21 10:58:39.0

我有几个单元测试(仅python3.6及更高版本),它们正在导入一个助手类以在开始测试之前在系统上设置一些东西(例如,拉一些Docker映像)。

该类在实例化时正在做所有事情。 它需要保持活动状态,因为它包含一些信息,这些信息在运行时会进行评估,并且需要进行不同的测试。

助手类的调用非常昂贵,我只想加快一次对助手类的测试。 我在这里的方法是使用单例,但是有人告诉我在大多数情况下不需要单例。 我还有其他选择吗,还是单例实际上是一个好的解决方案? 该选项应允许完全执行所有测试,并且可以自己执行每个测试。

我也会有一些理论上的问题。 如果我在这里使用单例,python如何并行执行此操作? python是在等待第一个实例完成还是有竞争条件? 如果是的话,我该如何避免它们?

对于您问题的“我还有其他选择”部分,我只能给出一个答案。

将如此复杂的设置用于单元测试(拉出docker映像等)使我感到怀疑:

这可能意味着您的测试实际上是集成测试,而不是单元测试。 如果您的目标是发现相关组件之间的交互中的错误或代码与其系统环境之间的交互中的错误,那么这可能会很好。 (您的设置涉及Docker映像的事实给您的印象是,您打算针对系统环境对被测系统进行测试。)如果是这种情况,我希望您能运气好的话能够回答问题的其他方面(测试,单例和线程安全性)。 为了吸引合适的专家,也许将您的问题标记为“集成测试”而不是“单元测试”是有意义的。

另一方面,复杂的设置可能表明您的单元测试尚未正确设计和/或被测试的系统尚未被设计为易于通过单元测试进行测试:单元测试专注于被测系统-隔离测试-与依赖组件的隔离,也与系统环境细节的隔离。 对于适当隔离的被测系统的此类测试,将不需要使用Docker的复杂设置。

如果后者是正确的,那么您可以通过熟悉“模拟”,“依赖注入”或“控制反转”等主题而受益,这将有助于您设计被测系统和单元测试用例,以使它们与系统环境无关。 然后,您将不再需要复杂的设置,并且问题的其他方面(单例,并行化等)可能不再相关。

  相关解决方案