Unit testing 什么是单元测试?你是如何做的? 许多帖子的精确副本:

Unit testing 什么是单元测试?你是如何做的? 许多帖子的精确副本:,unit-testing,Unit Testing,还有,谷歌 我读过一些关于单元测试的问题,但我不知道它是什么,也不知道你是如何做的。我希望有人能告诉我: 单元测试到底是什么?它是内置在代码中还是作为单独的程序运行?还是别的什么 你是怎么做到的 什么时候做?是否有时间或项目不这样做?一切都是可测试的吗 非常感谢您的帮助。单元测试包括将程序分成若干部分,并对每一部分进行一系列测试 测试通常作为单独的程序运行,但测试方法有所不同,这取决于语言和软件类型(GUI、命令行、库) 大多数语言都有,你应该为自己的语言寻找一种 测试通常定期运行,通常在源









还有,谷歌

我读过一些关于单元测试的问题,但我不知道它是什么,也不知道你是如何做的。我希望有人能告诉我:

  • 单元测试到底是什么?它是内置在代码中还是作为单独的程序运行?还是别的什么
  • 你是怎么做到的
  • 什么时候做?是否有时间或项目不这样做?一切都是可测试的吗

非常感谢您的帮助。

单元测试包括将程序分成若干部分,并对每一部分进行一系列测试

测试通常作为单独的程序运行,但测试方法有所不同,这取决于语言和软件类型(GUI、命令行、库)

大多数语言都有,你应该为自己的语言寻找一种

测试通常定期运行,通常在源代码每次更改之后运行。越频繁越好,因为你越早发现问题

单元测试到底是什么?它是 内置于代码中或作为单独的代码运行 程序?还是别的什么

:单元测试的主要目标是获取应用程序中最小的可测试软件,将其与代码的其余部分隔离,并确定其行为是否完全符合预期

本质上,您正在编写少量代码来测试代码的各个位。在.net世界中,您可以使用NUnit或MBunit之类的工具甚至visual studio中的内置测试工具来运行这些小代码。在Java中,您可以使用JUnit。基本上,测试运行者将构建您的项目,加载并执行单元测试,然后让您知道它们是否通过或失败

你是怎么做到的

单元测试说起来容易做起来难。要学好它需要相当多的练习。您需要以一种易于进行单元测试的方式构造代码,以使测试有效

什么时候做?是否有时间或项目不这样做?是 一切都是可测试的

你应该在有意义的地方做。并不是所有的东西都适合单元测试。例如,UI代码很难进行单元测试,这样做通常不会带来什么好处。然而,业务层代码通常非常适合于测试,这也是大多数单元测试的重点


单元测试是一个庞大的主题,为了充分了解它如何能给您带来最大的好处,我建议您读一本关于单元测试的书,比如“”,这本书将让您很好地掌握这些概念以及如何将它们应用到代码中。

什么是单元测试?这很难定义。在技术层面上,您可以构建调用代码库中的函数并验证结果的函数。基本上,您会得到一系列类似于“assert(5+3)==8”的内容,只是更复杂一些(如在DataLayer(MockDatabase()).getUser().name==“Dilbert”)。 在工具视图级别上,您添加了一个自动化的、特定于项目的检查,以确定所有内容是否仍然像您假设的那样工作。如果您进行重构并实现复杂的算法,这将非常非常有用。 结果通常是一堆文档和更少的bug,因为代码的行为是固定的

我为所有的边缘案例构建测试案例,并像一代垃圾收集器一样运行它们。当我实现一个类时,我只运行涉及该类的测试用例。一旦我完成了这个类的工作,我就会运行所有的单元测试,以查看是否一切都正常

您应该尽可能多地进行测试,只要测试代码很容易保持未测试状态。考虑到这一点,不,并不是所有的东西都是可以正常测试的。想想用户界面。想想航天飞机或核弹的驾驶员(至少不是纯粹的JUnit测试;)。然而,很多代码都是可测试的。数据结构是。算法是。大多数Applicationlogic类都是。那就试试吧


嗯。特莎

我发现说明它的最简单方法是看一些代码。NUnit网站上的这个入门页面很好地介绍了what和how

一切都可以测试吗?一般来说,如果它计算了一些东西,那么是的。不过,UI代码是另一个需要处理的问题,因为模拟用户单击按钮是很棘手的

你应该测试什么?我倾向于围绕我知道会很棘手的事情编写测试。复杂的状态转换、关键业务计算等等。一般来说,我不太担心测试基本的输入/输出内容,尽管纯粹主义者无疑会说我在这方面错了,所有的东西都应该测试。就像许多其他事情一样,没有正确的答案

关于“如何做”部分:

我认为的介绍很好地说明了不同风格的单元测试

关于“何时做”部分:

单元测试不仅仅是为了测试。通过进行单元测试,您还可以将软件的设计强制为可进行单元测试的设计。许多人认为,这种设计在很大程度上是好设计(TM),而不考虑测试的其他好处


因此,进行单元测试的一个原因是将您的设计强制到一些东西中,希望这些东西能够更容易地维护,如果您不是为单元测试而设计的话,它会是什么样子。

什么…

一种针对一组测试自动测试代码的方法,旨在强制实现预期结果并管理更改

从这个意义上讲,“单元”是代码中对测试有意义的最小原子组件,通常是某个类的方法。这个过程的一部分是建立存根对象(或“mock”),它允许您作为独立对象处理单元

如何…

单元测试的过程几乎总是内置在IDE中(或通过
int CombineNumbers(int a, int b) {
    return a+b;
}
void TestCombineNumbers() {
    Assert.IsEqual(CombineNumbers(5, 10), 15); // Assert is an object that is part of your test framework
    Assert.IsEqual(CombineNumbers(1000, -100), 900);
}
int CombineNumbers(int a, int b) {
    return a * b;
}