对古典TDD和Mockist感到困惑

时间:2018-03-23 16:34:18

标签: unit-testing mocking tdd bdd

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

与古典TDD和Mockist有关。我的理解是应该单独测试类,因此应该对所有依赖项进行存根/模拟。然而,根据文章,似乎有一大群人使用真实物体的古典TDD。互联网上有各种各样的文章强调单元测试当然不应该使用除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");
}

有人可以解决我的困惑吗?

1 个答案:

答案 0 :(得分:1)

  

有人可以澄清我的困惑吗?

你似乎根本不会感到困惑 - 有两个不同的思想学校对什么进行单元测试"是,因此应该如何使用。

例如,Kent Beck,在测试驱动开发示例中,编写

  

通过小规模测试推动开发的问题(我称之为"单元测试"但它们不能很好地匹配单元测试的公认定义) ....

强调补充。

可能有助于记住,20年前,最常见的测试模式是将其扔到QA"测试。即使在存在自动化测试的情况下,使这些测试有效所需的学科也不是常识。

因此,传达测试应与其他测试隔离的想法非常重要。如果开发人员会像极端程序员坚持他们应该的那样经常运行测试,那么那些测试需要在挂钟时间中可靠且快速。不能共享任何可变状态(自身,或间接通过被测系统)的测试可以并行有效运行,减少挂钟时间,从而减少它们引入的开发人员中断。

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

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

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

开始