Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何使用Winforms开始使用TDD_Unit Testing_Tdd_Automated Tests_Bdd - Fatal编程技术网

Unit testing 如何使用Winforms开始使用TDD

Unit testing 如何使用Winforms开始使用TDD,unit-testing,tdd,automated-tests,bdd,Unit Testing,Tdd,Automated Tests,Bdd,最近我读/看了太多关于TDD和BDD的文章,我真的很想掌握它。我是一个只编写代码然后从外部测试代码的开发人员(就像我们总是从外部开始的那样)。问题似乎在于如何启动和运行TDD。我只想创建一个简单的Winform应用程序,在其中我想显示一些东西的列表,比如说产品。我只是不知道从哪里开始,我应该先为控制器写一个测试吗?控制器需要引用以查看和服务等。NETMVC是为测试而构建的,因此入门有点容易,但Winforms是一个真正的难题。请给我一些在Winforms中显示TDD的视频(最受欢迎) 我看了大量

最近我读/看了太多关于TDD和BDD的文章,我真的很想掌握它。我是一个只编写代码然后从外部测试代码的开发人员(就像我们总是从外部开始的那样)。问题似乎在于如何启动和运行TDD。我只想创建一个简单的Winform应用程序,在其中我想显示一些东西的列表,比如说产品。我只是不知道从哪里开始,我应该先为控制器写一个测试吗?控制器需要引用以查看和服务等。NETMVC是为测试而构建的,因此入门有点容易,但Winforms是一个真正的难题。请给我一些在Winforms中显示TDD的视频(最受欢迎)

我看了大量视频,显示您正在测试一个类或功能,但如何测试不支持测试的UI

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


我写了大量的代码,我只是删除,因为我卡住了,请帮助

以下是我如何为任何类型的用户界面(无论是Web、Winforms、WPF或Java中的Swing,甚至是其他系统将要使用的Web服务界面)执行此操作的方法

  • 编写UI,并对其背后的任何数据进行硬编码
  • 写入控制器,并将硬编码数据移动到控制器。控制器应该只是以UI可以理解的形式呈现数据
您的控制器现在没有行为;只是静态数据——但它为UI提供了正确的API,现在您知道UI想要如何使用它了

  • 编写一个示例,说明UI将如何以最基本的形式使用控制器
  • 让这个例子起作用
  • 编写另一个示例,展示控制器在不同上下文中的不同行为
  • 让这个例子起作用
这些是你的单元测试!如果您知道您的控制器将需要一些其他类来协作,那么您也可以模拟这些类

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


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

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

  • 退房,还有他的书。看看这些视频,有一些很棒的,特别是“结对编程”部分。他的书是我读过的关于单元测试和TDD的最好的一本书,也是我从头到尾读过的唯一一本
  • 看看一些TDD卡塔。在上一个项目中我建议的网页上有一些。看看其他人是如何解决这些问题的。这真的很有帮助
  • 了解依赖注入
  • 如果您想在WinForms中使用TDD,请查看MVP模式。据我所知,这是在WinForms中将UI与业务代码分离的事实模式

  • 祝您搜索顺利。

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


    祝你好运

    谢谢你的反馈。真有趣!我要试一试。我喜欢您的解决方案的地方是采取初步步骤,先编写熟悉的代码。一旦我掌握了这项技术,我就可以采用纯测试优先的技术。谢谢你的回复非常有用。嗯,我从来没有为UI写过单元测试——太多了。但是,如果需要,可以先编写BDD场景。这是一个良好的开端。祝你好运感谢hattenn,您的输入非常有价值,您已经参考了一些很棒的视频和书籍。非常有用!谢谢你的回复。