2

我最近阅读/观看了很多关于 TDD 和 BDD 的内容,我真的很想掌握它。我一直是一个只编写代码然后从外部测试它的开发人员(就像我们总是开始一样)。问题似乎在于使用 TDD 启动和运行。我只想创建一个简单的 Winform 应用程序,我想在其中显示一些可以说产品的列表。我只是不知道从哪里开始,我应该先为控制器编写一个测试吗?控制器需要参考视图和服务等。ASP.Net MVC 是为测试而构建的,因此它有点容易上手,但 Winforms 是一个真正的痛苦。请给我一些在 Winforms 中显示 TDD 的视频(最受欢迎)。

我看过很多视频,展示了你测试一个类或特性,但是你如何测试不支持测试的 UI?

简而言之,我想知道是否有人已经做了一段时间的 TDD,他/她是如何在 Winforms 中做到的?

我写了很多代码,我只是因为卡住而删除了,请帮忙!

4

3 回答 3

4

以下是我为任何类型的 UI 执行此操作的方法,无论是 Web 或 Winforms 或 WPF 或 Java 中的 Swing,甚至是另一个系统将使用的 Web 服务接口。

  • 编写 UI,并对它背后的任何数据进行硬编码。
  • 编写一个控制器,并将硬编码的数据移动到控制器中。控制器应该只是以 UI 可以理解的形式呈现数据。

您的控制器现在没有任何行为;只是静态数据——但它为 UI 提供了正确的 API,现在您知道 UI 想要如何使用它。

  • 编写一个示例,展示 UI 如何以最基本的形式使用控制器。
  • 使示例工作。
  • 编写另一个示例,显示控制器在不同上下文中的不同行为。
  • 使示例工作。

这些是你的单元测试!如果你知道你的控制器需要一些其他的类来协作,你也可以模拟它们。

一旦你的协作者被模拟出来,你就已经知道控制器想要如何使用它们了。同样,您已经拥有这些协作者的 API,因为控制器正在使用它们。

这就是我们在 BDD 中谈论“由外而内”时所做的事情。

于 2013-02-07T19:44:52.380 回答
3

我也是 TDD 的新手,就像你一样,我正在努力学习。这是我在搜索过程中得出的结论,也许它也会对您有所帮助:

  1. 查看Roy Osherove 的网站,以及他的书“单元测试的艺术”。查看视频,有一些很棒的视频,尤其是“结对编程”部分。他的书是我读过的关于单元测试和 TDD 的最好的一本书,也是唯一一本我从头到尾读过的书。
  2. 查看一些 TDD katas。我在上一项中建议的网页上有一些。看看其他人是如何解决 katas 的。这真的很有帮助。
  3. 阅读依赖注入。
  4. 如果您想在 WinForms 中进行 TDD,请查看 MVP 模式。据我所知,这是将 UI 与 WinForms 中的业务代码分离的事实模式。

祝您搜索顺利。

于 2013-02-09T12:47:28.137 回答
0

控制器是一个很好的起点。将 View 公共 api 提取到接口,并使用模拟框架测试控制器与该接口的交互。您也可以对服务层执行相同的操作。此外,我会为此应用程序采用自下而上的方法,并在向 UI 层添加测试之前对较低级别的层进行单元测试。在 UI 层,我将使用 BDD 框架编写一组验收测试,并使用模拟框架使这些测试变得轻量级并减少测试数量。

祝你好运!

于 2013-02-09T12:58:15.233 回答