gpt4 book ai didi

c - 单个单元测试应该有多广泛?

转载 作者:行者123 更新时间:2023-11-30 21:03:14 24 4
gpt4 key购买 nike

我在 C 中编写应用程序。我是编写单元测试的新手。我将使用 glib测试框架。

我读了这个article在维基百科中。我不确定我的单元测试应该涵盖哪些内容。

我知道我的单元测试应该检查是否输入有效,是否获得了预期的结果。这就是为函数编写单元测试时需要完成的全部工作吗?

我是否还应该在每次修改每个变量的值时检查它?因为如果扩展功能,则可能会添加更多变量,并且可能会在其他各个地方修改当前变量,因此我将不得不更改测试本身。

请给我您的意见。

最佳答案

I am unsure of what my unit tests should cover.

也许将单元测试视为代码的规范(可运行文档!)会有所帮助。

  • 什么被视为有效输入?
  • 当给代码提供有效输入时会发生什么?它会产生预期的输出吗? (不要只测试一个有效的输入值;重点关注可能是 1 个典型案例,然后是所有边缘情况和极端情况,它们仍然可以正常工作。)
  • 当代码输入无效时会发生什么?是否产生了预期的错误/错误代码?

  • 代码依赖什么环境?

  • 如果环境设置不正确,会发生什么情况?

最后两点实际上是前三点的特例。这是因为单元测试不一定测试单个、孤立的函数:

  • “输入”不仅仅必须是函数参数。它可以是您的代码将读取(即依赖)的任何类型的程序状态。
  • 同样,“输出”不仅仅是函数的返回值。它可以是您的代码修改的任何变量或程序状态。
  • 您的单元测试可能不仅仅测试一个单独的函数,而是测试必须按顺序调用才能完成某项操作的多个函数之间的相互作用。作为文档/规范阅读,这样的单元测试将表明按该顺序调用函数是完成某些任务的适当甚至建议的方法。

Should I also check the value of each variable every time it is modified?

单元测试与它们正在测试的内容完全分开(通常称为被测系统,缩写为 SUT)。也就是说,您的单元测试应该是单独的功能,您可以在其中设置 SUT、执行它,然后根据预期结果检查结果。

因此你的单元测试函数将非常简单:

  • 设置 SUT 的输入。
  • 调用/执行 SUT。
  • 读取 SUT 的输出并与预期输出进行比较。

正如您所看到的,在如此简单的过程中,没有太多的空间来容纳不断改变其值的变量。如果您这样的单元测试,很可能它太复杂,您可能想要更改它,例如把它分开。

更改变量更有可能在测试代码(即 SUT 中)本身中看到。但这不是您放置测试逻辑的地方。这将进入一个完全独立的函数,它构成了您的单元测试。

(请注意,我说的是非常笼统的内容,因为您没有说明您用于单元测试的框架,所以我可能在某些问题上略有偏差。)

关于c - 单个单元测试应该有多广泛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26179266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com