目前,我正在开发一个我参与的初创项目的网站,我想尝试将TDD付诸实践。
所以…我在Visual Studio 2010中创建一个空白的解决方案,添加一个ASP.NET MVC网站项目和一个测试项目。
我还添加了一个名为“Domain”的类库,用于我的域对象,并为其添加了一个测试项目。
现在我想知道从哪里开始在做任何事情之前,我应该写一个测试?问题是 – 我应该开始为域对象编写测试吗?如果是这样,究竟应该测试什么,因为域对象还不存在?
或者我应该从网站项目开始,并为此编写测试?如果是这样,我该怎么写一个测试?家庭控制器/索引动作?
解决方法
一旦我有初始的DB,那么我使用一个ORM,在我的例子中,LINQ to sql,将DB表映射到一组初始类。我通常不会单独测试生成的代码,所以这给了我相当多的代码作为开始的基础。然后我创建一个存根方法,它抛出一个未实现的异常,以实现我正在使用的第一个域类的一个功能。通常,我从验证逻辑开始。一旦你有了存根方法,那么你可以使用VS右键菜单为这个方法创建一个或多个单元测试。然后你就在路上。
一旦我完成了第一个故事的域对象,我就开始使用MVC方面。首先,我将为第一个视图创建视图模型。这些点通常只是一个空的容器类。然后,我将创建视图,并强烈地将其添加到视图模型中。我将开始清理视图,根据视图的需要向视图模型添加属性。请注意,由于视图模型仅仅是一个容器,通常不存在与其相关联的单元测试。然而,它将用于后续的控制器测试。
一旦视图完成(或至少我的初始概念完成),然后我创建存根控制器动作或动作,同样,存根方法只是抛出一个未实现的异常。这足以让它编译,让我用这些工具为它创建单元测试。我根据需要继续测试方法,并确保其适用于给定输入,并产生适当的视图模型。如果该方法可以产生多个视图模型,即渲染多个视图,我可以遍历创建视图模型/视图/控制器代码的过程,直到故事完成。
必要时重复,直到您的故事实施,一路重构。