【问题标题】:How to unit test a function that does not return anything?如何对不返回任何内容的函数进行单元测试?
【发布时间】:2014-03-24 10:09:42
【问题描述】:

是否可以通过 mocking 找到函数中局部变量的值?

class A:
  def f(self):
    a = 5000 * 10
    B().someFunction(a)

如何为此函数编写单元测试?我嘲笑了someFunction,因为我不希望测试范围超出范围。我可以测试函数其余部分的唯一方法是在函数末尾检查变量 a 的值是否为 50000。我该怎么做?

【问题讨论】:

  • 您不对该代码进行单元测试,而是对其进行更改,使其成为实际可测试的独立应用程序逻辑。
  • 我认为这只是一个简单的例子,因为你的函数应该重写B().someFunction(50000)
  • 没错。这是一个过于简单的例子。我的要求是在函数的最后一行被调​​用时找到局部变量的值。

标签: python unit-testing mocking


【解决方案1】:

一个不返回任何东西、不修改任何东西、不引发任何错误的函数是一个基本上没有理由存在的函数。

  • 如果您的函数应该断言某些内容并引发错误, 给它错误的信息并检查它是否确实引发了正确的错误。
  • 如果您的函数接受一个对象并对其进行修改,请测试新的 您的对象的状态与预期的一样。
  • 如果你的函数输出 一些东西到控制台,你可以暂时重定向 输入/输出流并测试写入/读取的内容。

如果以上都不是,请删除您的功能并忘记它:)

【讨论】:

  • 该函数用于计算传递给另一个函数的变量的值。参数的计算是我想要测试的,如果我可以在不将其移至新函数的情况下对其进行测试,则更好。
  • 那么,按照 elias 的建议,也许您应该将您的函数视为一个模块,并为您的函数中的任何内容编写特定的单元测试。
  • 如果,例如,一个函数调用一个subprocess怎么办?单元测试的方法是什么?我们是不是直接用subprocess.check_output(command),然后看看会不会抛出CalledProcessError
【解决方案2】:

通过交互测试,您可以检查调用 someFunction 时使用的值。该函数内部发生的事情应该在该函数的单元测试中进行测试。

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 2021-06-28
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 2021-12-16
    • 1970-01-01
    相关资源
    最近更新 更多