【问题标题】:How to get started with TDD using Winforms如何使用 Winforms 开始 TDD
【发布时间】:2013-02-06 16:06:47
【问题描述】:

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

我观看了大量视频,展示了您测试某个类或功能,但是您如何测试不支持测试的 UI?

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

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

【问题讨论】:

    标签: unit-testing tdd automated-tests bdd


    【解决方案1】:

    对于任何类型的 UI,无论是 Web 或 Winforms 或 WPF 或 Java 中的 Swing,甚至是将被另一个系统使用的 Web 服务接口,我都是这样做的。

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

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

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

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

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

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

    【讨论】:

    • 感谢 Lunivore 的反馈。这真有趣!我会试一试。我喜欢您的解决方案的一点是迈出第一步并首先编写熟悉的代码。一旦我掌握了这项技术,我就可以采用纯测试优先技术。谢谢你的回复很有用。
    • 好吧,我从不为 UI 编写单元测试——太多的美学。但是,是的,如果您愿意,您可以先编写 BDD 场景。这是一个好的开始。祝你好运!
    【解决方案2】:

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

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

    祝您搜索顺利。

    【讨论】:

    • 感谢 hattenn,您的意见非常宝贵,您参考了一些很棒的视频和书籍。非常有用!感谢您的回复。
    【解决方案3】:

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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 2011-06-02
      相关资源
      最近更新 更多