2012-06-13 27 views
1

我得做一个简单的CRUD基础的应用。我试图以TDD的方式来解决这个问题。我是TDD的新手,实际上不知道如何继续我的测试。TDD CRUD情景

的情况是:

  • 我需要能够创建/更新/删除员工(一次一个)。
  • 我需要能够检索员工列表显示目的

你可以假设这是为了简单起见,命令行应用程序。 (实际上,我要做到这一点作为一个WPF MVVM应用程序。)

我不知道我的第一个测试应该是什么。

我迄今为止尝试是:

假设我有一个返回一组员工的员工资料库。

我试图首次测试:

[Test] 
public void RepositoryShouldReturnTheListOfEmployees() 
{ 
    var repository = new EmployeeRepository(); 
    var employees = repository.GetEmployees(); 

    Assert.IsNotEmpty(employees); 
} 

我开始用这个,然后从装getEmployees返回Employee对象()方法,使我的测试通过。然后,一旦测试通过,我重新表达了EmployeeRepository以实现一个接口并在测试方法上使用它。

这是一个很简单的任务而这种做法似乎是对我来说是矫枉过正(至少目前如此)。但我相信,当应用程序变得更大时,即使是微不足道的事情也会开始取得成效。

但是我有一种感觉的东西是不对的,我的做法。有经验的TDDer会采用相同的方法吗?或者那会是什么。另外,我想不出一个可用于“添加员工”功能的测试。

我可以跳过这些CRUD场景,也可以尝试测试其他更复杂的功能......但这是一种正确的方法吗?

基本上我现在正在做的是测试驾驶我的存储库,除了持久化和检索信息之外没有做任何其他的事情。到目前为止,这个TDDing对我来说似乎是一项非常平凡的任务。

感激你的投入。

回答

1

有时做正确的事很无聊。

这是我怎么看这个..

你EmployeeRepository是一个角色,这是应该支持CRUD的EmployeeObjects。所以这是你的应用程序和DB /数据存储之间的一个端口。 (请参阅端口和适配器模式Cockburn等)。

  1. 编写测试,记录EmployeeRepository必须满足的规范。这些测试调用角色/接口上的方法。您应该能够替换任何实现(在安装中创建实例)并能够针对它执行测试。例如SqlEmployeeRepository。这将有资格作为集成测试 - 您正在测试sql子系统遵循EmployeeRepository合同。每个成员都按照advt工作。
  2. 该应用程序的其余部分的单元测试将使用模拟该角色。他们会测试你的应用在EmployeeRepository上进行了正确的调用。 Step1将确保您的测试运行得更快..因为您已经从测试中消除了SQL依赖关系。