【问题标题】:Confused about Classical TDD and Mockist [closed]对经典 TDD 和 Mockist 感到困惑 [关闭]
【发布时间】:2018-09-02 09:55:18
【问题描述】:

这是一篇文章:https://martinfowler.com/articles/mocksArentStubs.html#ClassicalAndMockistTesting

这与经典 TDD 和 Mockist 有关。我的理解是应该单独测试类,因此应该对所有依赖项进行存根/模拟。然而,根据文章,似乎有一大群人使用真实对象的经典 TDDers。互联网上有各种文章强调单元测试当然不应该使用除 SUT 之外的真实类。例如,从 Microsoft 网站上的存根上看一下这个:https://docs.microsoft.com/en-us/visualstudio/test/using-stubs-to-isolate-parts-of-your-application-from-each-other-for-unit-testing

public int GetContosoPrice()
{
    var stockFeed = new StockFeed(); // NOT RECOMMENDED
    return stockFeed.GetSharePrice("COOO");
}

有人能解开我的困惑吗?

【问题讨论】:

  • 请记住,那篇文章写于 2007 年,当时 BDD 仍然主要关注类级别的行为(现在大多数人熟悉的系统级别的场景直到Dave Chelimsky 那年晚些时候的帖子:blog.davidchelimsky.net/blog/2007/10/21/…)。如今,我们在系统级别做 Martin 所说的“经典”(在我们的场景中使用真实系统或真实系统),但我们仍然在类级别使用模拟和存根。我在我的代码库中这样做:github.com/lunivore/montecarluni
  • 很多关于 BDD 的问题都像这样被关闭了,所以如果你遇到困难,请到 BDD Google 群组:groups.google.com/forum/#!forum/behaviordrivendevelopment
  • @ImranAzad 有什么困惑?单元测试一直是一个有争议的话题,因此互联网上不同的人有不同的强烈意见也就不足为奇了。

标签: unit-testing mocking tdd bdd


【解决方案1】:

有人能解开我的困惑吗?

您似乎一点也不感到困惑 - 关于“单元测试”是什么以及应该如何使用它,有两种不同的思想流派。

例如,Kent Beck 在“示例测试驱动开发”中写道

使用小规模测试推动开发的问题(我称它们为“单元测试”,但它们与单元测试的公认定义不太匹配)......

添加了重点。

请记住,在 20 年前,最常见的测试模式是“把它扔给 QA”测试。即使在存在自动化测试的情况下,使这些测试有效所需的学科也不是常识。

因此,传达测试应该与其他测试隔离的想法很重要。如果开发人员要像极限程序员所坚持的那样频繁地运行测试,那么这些测试需要在挂钟时间内可靠且快速。不共享任何可变状态的测试(无论是它们自己,还是间接通过被测系统)可以有效地并行运行,从而减少挂钟时间,从而减少它们引入的开发人员中断。

有一个单独的学科说,除了上述的隔离,我们还应该努力进行测试,将系统与系统的其他部分隔离开来。

如果您想真正了解具有这些不同想法的人们相互交谈的历史 - 包括认识到他们正在相互交谈并尝试创造新标签的历史,一个很好的起点是C2 维基

从现代角度来看,您可以从 Ham Vocke 的 Practical Test Pyramid 开始

【讨论】:

  • 令人着迷,谢谢。我读得越多,就越意识到这不是非黑即白的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 2017-02-28
  • 2016-09-04
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多