【问题标题】:Run a python unittest only if another one passes仅当另一个通过时才运行 python unittest
【发布时间】:2018-04-03 02:06:00
【问题描述】:

我是单元测试的新手,我正在编写一个类来模拟针孔相机的行为。

我在 Python 中使用 unittest 模块进行了多个单元测试,并且我的 Camera 类有一个 lookAt 方法,它可以让它看着某个点,即它旋转相机框架使其指向目标。 我还有一种方法可以将 3D 点投影到相机的图片中。

我在这里的场景是我首先测试lookAt方法,然后如果测试通过,我使用lookAt方法让我的相机看一个立方体,然后将该立方体投影到我相机的图片上(投影是在这里测试)。

单元测试模块中是否有可能让我在另一个测试中运行测试?还是我应该手动制作一个lookAt矩阵,然后单独测试投影(我认为这将是这里的最佳实践)?

【问题讨论】:

  • 您可以在同一个测试函数中使用 2 个断言。如果第一个失败,则该测试将停止,第二个将不会被评估。

标签: python unit-testing camera python-unittest


【解决方案1】:

查看skipIf decorator 并根据您在第一个测试中设置的条件将其应用于您的依赖测试。

@unittest.skipIf(condition, reason)

例如(来自上面的链接):

    @unittest.skipIf(mylib.__version__ < (1, 3),
                 "not supported in this library version")

还有subTest(),但文档将 subTest 的目的描述为“当您的某些测试仅存在一些 [原文如此] 非常小的差异时。”

【讨论】:

  • 我可能会选择 Seaman 的回答,看起来更简单直接,因为除了测试的顺序之外,我似乎无法控制测试的运行顺序被写。另一方面,我认为最好手动编写lookAt函数的预期输出并在我的投影测试函数中使用它,这样测试就不会相互依赖。
  • 您使用哪种模式取决于您希望如何表示结果。单个测试中的多个断言仍然会汇总为通过或失败的 1 个测试,并且在第一个断言失败之后的任何内容都不会执行。如果您想要更详细的结果来指示每个结果,那么您需要将它们建模为单独的测试。
  • 我同意你的观点,因为我相信这是最好的方法。
猜你喜欢
  • 2015-08-08
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
相关资源
最近更新 更多