问题标签 [test-first]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
17 回答
4553 浏览

tdd - 如何对单元测试进行单元测试?

我在 MVCStoreFront 应用程序上观看 Rob Connerys 的网络广播,我注意到他正在对最平凡的事情进行单元测试,例如:

会有一个像这样的测试:

虽然,我完全支持单元测试,但我有时想知道这种形式的测试优先开发是否真的有益,例如,在实际流程中,您的代码上方有 3-4 层(业务请求、需求文档、架构文档) ,其中实际定义的业务规则(折扣价格是价格 - 折扣)可能被错误定义。

如果是这种情况,那么您的单元测试对您来说毫无意义。

此外,您的单元测试是另一个失败点:

现在测试有缺陷。显然在一个简单的测试中,这没什么大不了的,但是假设我们正在测试一个复杂的业务规则。我们在这里得到什么?

快进两年应用程序的生命,维护开发人员正在维护它。现在业务改变了它的规则,测试又中断了,一些新手开发人员错误地修复了测试……我们现在又遇到了一个故障点。

我看到的只是更多可能的失败点,没有真正的收益回报,如果折扣价格错误,测试团队仍然会发现问题,单元测试如何节省任何工作?

我在这里想念什么?请教我热爱 TDD,因为到目前为止我很难接受它是有用的。我也想,因为我想保持进步,但这对我来说没有意义。

编辑:有几个人一直提到测试有助于执行规范。根据我的经验,规范也经常出错,但也许我注定要在一个规范是由不应该编写规范的人编写的组织中工作。

0 投票
8 回答
22240 浏览

testing - TDD 和测试优先开发(或测试优先编程)之间有区别吗?

这两个想法听起来与我非常相似,但可能存在细微的差异或完全相同的东西,以不同的方式解释。TDD 和测试优先开发/编程之间有什么关系?

0 投票
3 回答
363 浏览

c# - TDD:你会如何在这门课上工作,测试优先的风格?

我正在编写一个小应用程序来自学 ASP.NET MVC,它的一个功能是能够在亚马逊(或其他网站)搜索书籍并将它们添加到“书架”。

所以我创建了一个名为 IBookSearch 的接口(使用方法 DoSearch),以及一个看起来像这样的 AmazonSearch 实现

理想情况下,我希望完成这种 TDD 风格,首先编写一个测试。但我必须承认我很难理解它。

我可以创建一个实现 DoSearch() 的 FakeSearch 并返回一些临时书籍,但我认为目前这不会带来任何价值,不是吗?也许稍后当我有一些使用书籍列表的代码时。

What else could I test first? The only test I can think of would be one that mocks the call to the cloud (at GetAmazonResults) and then checks that DoSearch can execute the Linq2XML select correctly and return the correct list. But it seems to me that this type of test can only be written after I have some code in place so I know what to mock.

Any advice on how you guys and girls would go around doing this test-first style?

0 投票
5 回答
301 浏览

c# - 测试写作策略建议

所以,这些天我越来越沉迷于测试驱动的开发,我在思考 tdd 时编写的代码越多,似乎我必须做出的关于我应该编写的测试范围的决定就越多。我想为我自己的项目编写多少单元测试设置一个个人策略,并且想知道我是否可以就你们采取什么样的方法获得一些建议。

这是我目前面临的决定的一个例子......

我有三个班...

我有一个用户类的数据访问层,我已经有一个“GetUser”测试设置。如您所见,在我的业务逻辑中,我有一个方法 UserManager.GetTop5(),它返回我刚刚从数据库中拉出的用户的前 5 个收藏夹。此方法非常简单,目前不涉及任何外部资源或依赖项。

所以我的问题是,即使失败的可能性很小,你会继续为这个“GetTop5”功能点编写另一个测试吗?

如果您将来扩展功能,您是否仍然设置了测试?还是您认为这里的测试过度?

0 投票
4 回答
216 浏览

sql-server - SQL Server 2005 的测试优先开发工具?

几年来,我一直在使用一个名为 qmTest 的测试工具,它允许我为一些 Firebird 数据库进行测试驱动的数据库开发。我为一个新特性(表、触发器、存储过程等)编写一个测试,直到它失败,然后修改数据库直到测试通过。如果有必要,我会在测试上做更多的工作,直到它再次失败,然后修改数据库直到测试通过。一旦功能测试完成并通过 100% 的时间,我将其保存在数据库的其他测试套件中。在继续进行另一个测试或部署之前,我将所有测试作为一个套件运行,以确保没有任何问题。测试可以依赖于其他测试,结果会记录并显示在浏览器中。

我敢肯定,这里没有什么新鲜事。

我们的商店的目标是在 MSSQLServer 上实现标准化,我想使用相同的过程来开发我们的数据库。有谁知道允许或鼓励这种开发的工具?我相信 Team System 确实如此,但我们目前不拥有它,而且可能在一段时间内不会拥有它。

我不反对脚本,但会欢迎更多图形环境。

有什么建议么?

0 投票
4 回答
298 浏览

asp.net-mvc - 开始一个新项目 - 我从哪里开始?

我将开始一个我自己的项目,它将是 ASP.NET MVC + Fluent NHibernate。我想尽可能多地使用测试优先的方法。那么,我究竟从哪里开始呢?数据库架构?领域模型?将域模型类映射到数据库?

0 投票
1 回答
265 浏览

unit-testing - 测试优先开发的提示和技巧

只需阅读此博客文章 -帮助!我不擅长以测试优先的方式迁移/重组代码。我有过类似的经历,并认为我会尝试向更广泛的社区开放......

0 投票
4 回答
2082 浏览

c# - 如何先开发一个秒表类测试?

我目前正在尝试实现一个StopWatch类。界面类似于:

基本上我的应用程序需要使用 a StopWatch,但出于测试目的,最好有一种人工修改StopWatches 的结果的方法,所以这就是我让所有代码引用 anIStopWatch而不是 .NET 的原因System.Stopwatch

当我试图开发这个 Test-First 时,我必须StopWatch在编写测试之后才为我的类编写代码。我已经意识到我要做的测试不会是单元测试,因为我在System.Stopwatch内部使用 .NET 的类。

所以,在我的理解中,我现在唯一能做的就是如下所示的测试:

我知道我不能像我的单元测试那样频繁地运行它,但我认为对此我无能为力。我的方法是正确的还是我错过了什么?

谢谢

编辑

所以我最终遵循了 Quinn351 和 Sjoerd 的建议,并编写了一些使用 DateTimes 而不是 .NET 的 Stopwatch 类的代码:

这使我可以制作具有两个日期的 getter/setter 的其他实现,因此我可以让 GetTimeElapsed() 返回我想要的任何内容。

0 投票
4 回答
152 浏览

unit-testing - 关于单元测试的几个问题

假设我们正在设计一个 Stack 类 test-first (TDD):

该堆栈使用大小为 16 的内部数组来存储其元素。在您需要添加第 17 个元素之前,它会正常工作。因为我可能需要第 17 个元素,所以我决定将这个功能添加到我的堆栈中,所以我开始考虑我可以为必须添加该功能的测试起什么名字。这将是我第一个问题的主题。

我首先选择了以下形式的东西:

进而

但经过一番思考后,我得出结论,也许像下面这样的东西会更合适:

在第一种情况下,我的推理必须这样做,我只说它做了什么,而不是什么时候。第二,我是说何时添加更多项目,但我也在说明我是如何考虑实现它的(内部),这可能是不正确的。在我看来(我不确定我是否正确),我的测试应该是我的 SUT 与外部的可能交互,而不是它如何在内部实现。我对吗?

在我看来,第 3 个选项是最好的,因为它清楚地说明了它的作用(大小增加——实际上,它的大小翻了一番),什么时候做(当它满了),并且没有将我与任何特定的实现(我可能稍后想将其更改为内部 ArrayList!)。

这引出了我的第二个问题:假设我为内部使用数组的 Stack 类进行了所有单元测试,并且它工作正常并且如预期的那样,如果我以后想要重构并将数组更改为ArrayList 或任何其他类型的数据结构?或者测试是否应该以任何方式反映这一点?我猜没有,但我不确定。

0 投票
3 回答
426 浏览

unit-testing - 如何协调 TDD 与 SUT 接口的合同?

假设我们正在使用 TDD 实现一个Stack类,我们需要为 Stack 类的每一位功能添加一个新的测试来练习它:

现在,另一方面,在进行单元测试时,应该关注我们的类应该提供的外部行为,因此单元测试集检查我的 Stack 接口的所有预期契约是否得到满足。

我的问题是如何调和这两个方面。

例如,假设我在Stack内部使用了一个初始大小为 8 的数组,如果我的用户想要插入第 9 个项目,我会希望它增长。为了添加调整大小的功能,我希望至少有一个测试可以推动我的类代码朝那个方向发展(对吗?)。

另一方面,这将添加一个单元测试(或者这不是一个真正的单元测试吗?),它不执行类的实际合同(我假设用户不关心内部实现堆栈)但它的实现。

所以我们这里有一个转折点,我不知道如何解决。我在这里混淆概念了吗?

谢谢

编辑

经过大量谷歌搜索后,我来到了似乎可以解决此问题的以下链接:http: //stephenwalther.com/blog/archive/2009/04/11/tdd-tests-are-not-unit-tests.aspx