我们公司正在提高代码质量和流程,以便在交付一段代码时采用。我的问题是关于单元测试,我想收集有关您在被要求实现功能时采用的流程的信息。
TDD是一种单元测试吗?根据我在TDD中的理解,您首先编写测试(失败),编写代码然后运行应该通过的测试。可能是代码将进行外部方法调用。但是,当我们首先编写测试时,我们怎么想知道所需的存根?
当您在发布之前构建应用程序时,您在构建中包含哪种类型的测试?构建是运行集成测试还是仅运行单元测试?
除了TDD,你还会写任何其他类型的测试吗?对不起,如果问题稍有失真。您对如何进行开发的经验表示高度赞赏。感谢
答案 0 :(得分:6)
作为一个例子:经常被忽视的东西,因为它不属于单元测试的范围,但是是一个非常有效的测试,而对于开发过程中的前端加载很重要的是部署。
如果软件开发无法轻松部署到生产环境而无需付出巨大努力和变更(对软件或环境架构),重要的是要事先了解这一点,而不是在它出现前一周。一旦你完成了这个过程,有没有一种方法可以确保它被正确部署?
当您了解该过程时 - 为什么不编写脚本并将其自动化?如果您知道必须部署它的要求,为什么不在这之前编写测试呢?
之前我已经说过但我会再说一遍 - 我在这个主题上发现的最好的资源是不断增长的面向对象软件,以测试为导向 - 这是Kent Beck签名系列。
答案 1 :(得分:3)
TDD is not about testing。 TDD 使用测试来驱动代码的设计。 TDD 产生测试作为设计代码的一个愉快的副作用,首先编写测试,但它不是测试:它不是测试方法,目的不是产生测试。
测试驱动开发是一种单元测试吗?
没有。这是设计方法论。
根据我在TDD中的理解,您首先编写测试(哪个 写完你的代码,然后运行你应该通过的测试。
你错过了非常重要的一步。您首先编写测试,编写代码直到测试通过 - 然后重构。测试允许您安全地重构,确保在调整设计时所需的行为继续有效。测试还指导您使用可测试的代码,推广更小的方法,更短的参数列表,以及比其他方法引导您更简单的设计。
除了TDD,你还会写其他类型的测试吗?
当我这样做时,通常表明我未能正确地进行TDD(但肯定会发生)。我们有单元测试和用户验收测试;两者都可以在代码之前编写,但有时我们的用户验收测试是在开发周期的后期编写的。他们不应该,但有时他们是。
答案 2 :(得分:2)
这里有几个问题,我们试图按逻辑顺序解决这些问题
TDD是一种单元测试吗?
我说“是”,从某种意义上说它创建了单元测试,即使它不是使用TDD的唯一好处。关于评论员所强调的主题,但在你的问题中没有提到:TDD不仅确保测试覆盖率和文档化(良好的测试是低级代码文档的最佳形式之一)。使用TDD会迫使您做出某些设计决策,通常会改进整体应用程序设计。
您是否编写其他测试?
好吧,我没有写任何其他单元测试。 TDD的重点是开发与测试开发平行的代码。通过在一个循环中编写软件 - 单个测试,只有足够的代码来传递它,您确信您的测试记录了代码中所需的所有功能和行为,并确保代码是可测试的(您必须编写它那样做TDD)。不需要额外的单元测试
您应该使用其他类型的测试。首先考虑集成测试,但还有其他一些,例如验收测试。如果你有自动化,你会更容易。不是你应该写的验收测试 - 它应该是你的客户/利益相关者,你应该在编写它们的技术部分帮助他。您可能对Fitnesse http://fitnesse.org/感兴趣 - 它是一个帮助非技术人员建立验收测试的工具。
关于存根?
如果没有具体的例子,很难讨论这个问题。我现在可以说的是 - 只需一次编写一个代码。如果你这样做,你有可能不会遇到一个复杂的类,并考虑如何绕过其复杂的依赖关系。
构建中应包含哪些测试?
我想说 - 所有这些,如果有可能的话!
答案 3 :(得分:2)
在原始Red-Green-Refactor循环的5分钟左右,TDD与 design 有关。但是,由于没有任何设计可行,因此它可以永远地关于测试 - 您的TDD测试然后成为完美测试工具的一部分,以检测由进一步发展引起的回归。所以是的,我想你可以说测试驱动开发是一种单元测试形式:)
但我们怎么想知道我们所需要的存根 先写我们的测试?
TDD通常需要(快速)之前的建模会话,您可以充实SUT将与之合作的大图片类。
但是,您无需详细了解这些合作者的工作方式。对于模拟,你基本上应用一厢情愿的想法,当你稍后在某些时候对它们进行TDD时它们的实现会正常运行,所以现在你可以专注于SUT。
当您在发布之前构建应用程序时,会出现什么样的情况 测试你是否包含在构建中?构建是否运行您的集成 测试还是仅运行单元测试?
当你练习持续集成时,你应该每次运行你的单元测试,这样你理论上可以采用任何(非失败的)构建并将其用作发布版本。
但是,您可能希望在发布版本之前运行自动或手动集成/验收测试。例如,GUI通常不易于单元测试,因此接受/集成测试是跟踪其中的错误的好方法。