Unit testing 我的代码与它的环境有很强的交互作用。我应该费心进行单元测试吗?

Unit testing 我的代码与它的环境有很强的交互作用。我应该费心进行单元测试吗?,unit-testing,Unit Testing,我正在处理的代码从操作系统收集性能数据(如CPU使用率)。我想知道我是否应该尝试对这段代码进行单元测试。似乎要对代码进行单元测试,您需要设计隔离到单元中的代码。虽然我的代码与操作系统紧密相连,但如果我将与操作系统交互的代码隔离到一个可以模拟的包装器中,就不会有太多的测试了 所以,我认为单元测试在这里不起作用。我是否误解了应该如何使用单元测试?我读过的博客中的每个人都在鼓吹它们是好的,但我不确定它们是否对所有应用程序领域都有用 例如,如果我将这段代码移到另一个版本的操作系统上,我肯定会有很多bug

我正在处理的代码从操作系统收集性能数据(如CPU使用率)。我想知道我是否应该尝试对这段代码进行单元测试。似乎要对代码进行单元测试,您需要设计隔离到单元中的代码。虽然我的代码与操作系统紧密相连,但如果我将与操作系统交互的代码隔离到一个可以模拟的包装器中,就不会有太多的测试了

所以,我认为单元测试在这里不起作用。我是否误解了应该如何使用单元测试?我读过的博客中的每个人都在鼓吹它们是好的,但我不确定它们是否对所有应用程序领域都有用

例如,如果我将这段代码移到另一个版本的操作系统上,我肯定会有很多bug,但我看不出单元测试如何帮助我找到它们


你发现同样的问题了吗?我甚至应该尝试为此编写单元测试吗?

您有任何业务逻辑吗?计算?或者你只是在抓取和显示数据

单元测试对于测试单元很有用。换句话说,应用程序的任何部分都可以独立工作吗?如果不是,那么就没有什么真正的单元测试


功能测试是另一回事…

应用程序的结果是性能测量,但是您确定性能的度量是正确的吗?这就是测试驱动开发的亮点所在。您必须编写您知道在逻辑上工作的代码,然后当您运行应用程序时,如果您的所有测试之前都通过了,那么您可以更加确信您的度量是正确的


测试驱动的开发TDD正在快速增长,并且是XP(敏捷)的一个组件,它似乎真的在加速发展。这是值得研究的。

听起来您可能会从一些基本测试中受益,比如:“当我将整个模块移植到另一个操作系统时,它是否会喷射出任何数据?”,但除此之外,要务实


如果这样做实际上对你没有帮助,就不要这样做。为了测试而测试是一种浪费时间却毫无用处的简单方法。

我发现很难相信任何人不使用过程或方法或可以转化为过程或方法的代码块就能编写代码。如果您可以这样做,那么您就可以为这些方法编写测试。编写这些测试的过程几乎会迫使您编写更干净、更解耦的代码。如果您的方法绑定到内核数据结构,那么为您的方法编写测试将迫使您从这些逻辑数据结构中抽象出来,并围绕它们编写精简包装。您可能无法完全测试代码的每一部分,但我认为您会发现——特别是如果您按照@Wambie的建议首先编写测试——您将能够测试比您想象的更多的内容,并且您的代码将因此变得更好