1

我有一个简单的基于 CRUD 的应用程序要完成。我正在尝试以 TDD 方式解决此问题。我是 TDD 的新手,实际上无法理解如何进行测试。

场景是:

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

为简单起见,您可以假设这是一个命令行应用程序。(我实际上打算将其作为 WPF MVVM 应用程序来执行。)

我不确定我的第一个测试应该是什么。

到目前为止,我尝试过的是:

假设我有一个返回一组员工的员工存储库。

我尝试的第一个测试是:

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

    Assert.IsNotEmpty(employees);
}

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

这是一项非常微不足道的任务,这种方法对我来说似乎有点过头了(至少现在是这样)。但是我敢肯定,当应用程序变得更大时,即使是微不足道的测试也会开始得到回报。

但我有一种感觉,我的方法有些不对劲。有经验的 TDDer 会采用同样的方法吗?或者那会是什么。我也想不出可以用于“添加员工”功能的测试。

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

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

感谢您的所有投入。

4

1 回答 1

1

有时做正确的事很无聊。

我是这样看的。。

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

  1. 编写测试来记录 EmployeeRepository 必须满足的规范。这些测试调用角色/接口上的方法。您应该能够替换任何实现(在设置中创建实例)并能够针对它运行测试。例如 SqlEmployeeRepository。这将有资格作为集成测试 - 您正在测试 sql 子系统是否遵循 EmployeeRepository 合同。每个成员都以 advt 的身份工作。
  2. 应用程序其余部分的单元测试将为此角色使用模拟。他们将测试您的应用程序是否对 EmployeeRepository 进行了正确调用。Step1 将确保您的测试快速运行。因为您已经从测试中消除了 SQL 依赖关系。
于 2012-06-14T06:10:40.423 回答