这些测试用例用C#写成,但是很接近英语,即使非技术人员也可以读懂。 (请参照Martin Fowler的 BusinessReadableDSL )。这样,其他的团队成员,特别是对领域更熟悉的业务人员,可以很容易的读懂测试用例, 因此也更可能指出测试中遗漏的案例及场景。
  若采用支持以自然语言形式书写测试用例的框架(例如Ruby平台下的Cucumber)则会更好。
  以"ACTION"结尾的变量为lambda表达式。他们是真正的测试逻辑。
  SEARCH_WITH_ACTION会向web服务发出请求,并会解析返回的以竖线分割的数据。类CustomerService和Subscriber在领域层中,他们 会在多个测试中重复使用。

  SEARCH_WITH_ACTION =

  phoneNumber =>

  {

  subscribers = customerService.SearchWithTelephoneNumber(phoneNumber);

  };

  ACCOUNT_INFORMATION_SHOULD_BE_RETURNED_ACTION is for verifying the data

  ACCOUNT_INFORMATION_SHOULD_BE_RETURNED_ACTION =

  accountNumber =>

  {

  //Get expected subscriber from fixture

  Subscriber expected = SubscriberFixture.Get(accountNumber);

  CustomAssert.Contains(expected, subscribers);

  };

  领域层

  CustomerService类以真实web服务的名称命名。在需求文档、日常对话、架构图以及代码中,都用这个名称来指代此web服务。 使用统一的名称,能除去二义,提高沟通效率。

  public class CustomerService

  {

  public Subscriber SearchWithTelephoneNumber(string telephoneNumber)

  {

  string url =

  string.Format(

  "{0}/subscribers?telephoneNumber={1}",

  endpoint, telephoneNumber);

  //Send http request to web service, parse the xml returned,

  //populate the subscriber object and etc.

  return GetResponse(url);

  }

  ...

  }

  Subscriber类建模了用户。比起用竖线分割的字符串,增加一层数据抽象,用对象表示返回的数据,能使 测试更容易理解(你应该不会偏好用pipedData[101]表示电话号码吧?)。