Unit testing 我应该使用TDD来设计我的客户机和库吗?

Unit testing 我应该使用TDD来设计我的客户机和库吗?,unit-testing,tdd,Unit Testing,Tdd,假设您创建一个库来进行一些计算,那么您可以使用TDD来构建它,而不会出现问题,对吗?现在您必须实现实际使用此库的代码。例如,客户机可以是Java Servlet或CLI程序 必须使用TDD概念构建此客户机代码吗?您为这些客户机编写测试吗?TDD仅仅是关于库的设计,还是我需要担心客户机代码?(测试驱动开发)是关于构建整个过程。但是,您当然可以将其限制为仅限于库或应用程序的其他方面 TDD的原则之一是编写测试,然后编写代码以满足测试要求。例如,您可能有一个规范,该规范要求创建一个将两个数字相除的方法

假设您创建一个库来进行一些计算,那么您可以使用TDD来构建它,而不会出现问题,对吗?现在您必须实现实际使用此库的代码。例如,客户机可以是Java Servlet或CLI程序

必须使用TDD概念构建此客户机代码吗?您为这些客户机编写测试吗?TDD仅仅是关于库的设计,还是我需要担心客户机代码?

(测试驱动开发)是关于构建整个过程。但是,您当然可以将其限制为仅限于库或应用程序的其他方面

TDD的原则之一是编写测试,然后编写代码以满足测试要求。例如,您可能有一个规范,该规范要求创建一个将两个数字相除的方法。您将创建一个带有预期参数的空方法,并编写一个传递值并验证结果是否符合预期的测试

现在,一开始,测试将失败。他们应该这样做。只有提供了正确的实现,测试才会成功。一旦测试成功,你就基本完成了;当然,除非另有要求


关键是测试应该由应用程序的需求驱动。代码的编写方式应确保测试通过。只有当测试通过时,您才能完成。

这取决于您的客户端逻辑。如果它主要是用户界面的东西,TDD可能会过度使用,让你头疼。但是,如果您的客户有一些逻辑,理论上可以拆分为单独的库,那么这个逻辑可以在TDD的帮助下有效地实现。如果您愿意,您可以使用TDD,并随时应用它。然而,以某种方式做事有最佳实践和理由

是一种工作方式,由在实现事情之前编写测试驱动。克里斯在他的回答中已经对此做出了很好的解释。的基本原理是,通过编写测试,您首先需要思考您想要的结果,并且您需要以一种可以使用的方式设计事物(测试)

我想知道为什么您不将TDD用于客户机代码,而将其用于库?测试对于良好的设计和高质量的软件至关重要

必须使用TDD概念构建此客户机代码吗

对。所有代码都是这样编写的

您为这些客户机编写测试吗

对。否则你怎么知道它是有效的

TDD仅仅是关于图书馆的设计

没有

还是我需要担心客户端代码


显然,您必须对all编码all时间使用TDD。否则,您并不是真正使用测试来驱动开发。如果设计不是由测试驱动的,那么它就不是TDD。

为什么要区别对待它?它仍然是代码,您必须知道它是否已损坏。设计必须足够灵活,以接受未来的变化。听起来TDD应该有帮助


如果您使用的框架对测试不友好,那么肯定会有一些困难。但即便如此,还是有办法将它们划分为一个非TDD测试不友好层,该层调用TDD表示层。

在我给出一些TDD信息后,我将在下面更直接地回答您的问题

记住TDD实际上是一个设计过程,它碰巧涉及到单元测试并遵循红绿重构周期。这是一个设计过程,因为在每个红绿重构迭代中,您首先为不存在的代码编写测试。你在设计你要去的地方

TDD的第一个优点是保证代码的设计是可测试的。可测试代码往往具有松散耦合和高内聚性。松耦合和高内聚性很重要,因为它们使代码在需求更改时易于更改。TDD的第二个优点是,在完成系统的实现之后,您碰巧有一个庞大的回归套件来捕获假设中的任何错误和更改。因此,TDD使您的代码易于更改,因为它创建了设计,并且由于它创建了测试线束,使您的代码可以安全地更改


现在,来回答你的问题。因为TDD是一个设计过程而不是测试过程,所以在尽可能多的代码中合理地使用TDD是有帮助的,因为无论您在哪里使用它,您的设计都将受益于TDD过程。事实上,我更喜欢从客户机开始实施功能,因为这有助于我首先关注客户场景(有关更多信息,请参阅此链接)。通常,如果我使用模型视图控制器/模型视图演示器/模型视图视图模型来实现某些内容,我将开始使用控制器/演示器/视图模型的TDD,而不会测试视图,因为它是一个没有逻辑的薄包装器(实现和维护以自动测试验证视图的成本很高),并将根据其意义将内容移动到模型中。

您很好地解释了该概念。我很困惑。到目前为止,我看到的所有TDD示例都太简单了。我试图了解在实际应用程序中使用servlet和ejb应用TDD的最佳方法。谢谢你的帮助!概念很清楚,感谢您的加强。事实上,当我遇到servlet和ejb时,我并不确定。不确定模拟的使用。即使在阅读了测试驱动开发(Test-Driven Development)之后:举个例子,我仍然对它感到困惑。那么,您仍然对什么感到困惑(因为您没有接受任何答案)?听起来你不确定在使用某些特定技术时如何进行TDD。你是对的。TDD现在已清除。我在将TDD应用于上述技术时遇到问题。我将指导这项研究,以找到最好的解决方法