技术开发 频道

.NET中的TDD

  接下来就要实现GetRecord方法。

  新建一个类库项目,然后添加一个LINQ To SQL的子项,把下表拖放进LINQ To SQL面板。

  数据表结构

  数据表中数据

  然后在类库的CS文件中,添加入下代码:

  1 public bool GetRecord(int id)

  2 {

  3 DataClasses1DataContext DCDC = new DataClasses1DataContext("server=.;database=mytestdb;uid=sa;pwd=sa;");

  4 if (DCDC.GetTable().Where(record=>record.ID ==id).Count() ==1)

  5 {

  6 return true;

  7 }

  8 else

  9 {

  10 return false;

  11 }

  12 }

  13

  当然测试是不关心我们用什么技术实现方法的,它只关系输入和输出。

  这时我们再运行测试,会发现测试通过了,这时我们叫做“绿”。

  可能有的人发现,在这个测试中,只能测一个数据,没有代表性,如果要测多个数据,还得一个一个换id值和expected值。是的,这是一个头痛的事,得想们办法来解决。

  正好,微软有提供数据驱动的单元测试,什么意思呢?就是可以把id和expected的值保存在数据源中,然后批量测试。如果全通过说明这个方法实现的没问题,如果有错,也可以针对性的能找出什么数据使GetRecord方法报错的。这个东西很不错。

  首先来构建一个数据源,XML是个不错的选择,新建一个RecordExistTestCase.xml文档,内容如下

  1

  2

  3

  4 0

  5 false

  6

  7

  8 -1

  9 false

  10

  11

  12 1

  13 true

  14

  15

  16

  当然你还可以添加你以为好的测试用例。

  再改造一下测试方法

  1 [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\RecordExistTestCase.xml", "pic", DataAccessMethod.Sequential)]

  2 [ DeploymentItem("TestDataOperate\\RecordExistTestCase.xml")]

  3 [ TestMethod()]

  4 public void GetRecordTest()

  5 {

  6 ……

  7 }

  8

  OK,现在就要以用上面xml里的数据来批量测试了。

  测试通过来,接下来就要程序员来整理一下自写的代码了,比如书写规范问题,方法是否冗余重复,注释是否完善等。也就是所说的重构了。

  到此,一个TDD cycle就完成了,现实的cycle可能更复杂,这里只是对单个测试条目单个方法进行说明的。

  TDD更适合在敏捷的开发中去用,比如XP,虽然scrum是侧重管理和组织,也能很好的溶入TDD。

0
相关文章