处理TDD中的实施问题

时间:2010-10-27 10:14:03

标签: tdd

我刚刚开始使用TDD并很快遇到了一堵砖墙。这是我的情景...... 我正在尝试对一个Image对象进行建模,并且通过TDD步骤我已经开始使用一个简单的对象,最终会成长为......

public class ImageObject
{
 public string Name {get; set;}
 public int Width {get; set;}
 public int Height {get; set;}

 public bool IsValid()
 {
  //Some rules
 }
}

当然是强制性测试......

[Test]
public void ImageWidthCannotBeLessThanZero {...}
[Test]
public void ImageHeightCannotBeLessThanZero {...}    
and so forth...

到目前为止一切顺利。接下来,我想以某种方式表示类中的物理文件。它可以是文件路径

public class ImageObject
{
  public string Path {get; set;}
}

或一系列字节

public class ImageObject
{
  public byte[] Bytes {get; set;}
}

(请注意,这不是关于DB与存储文件系统的争论。)

此时我感觉不舒服,因为我的思绪正在漂移并开始考虑基础设施/实施细节。 我的缺点在哪里?我应该在实施细节上做出决定吗?我需要一个聪明的设计模式来处理这个问题吗?模拟框架会有帮助吗?这是一个对象分析/设计问题,我应该使用UML工具? (等一下,我认为TDD是关于设计的?)

无论如何,我如何克服这个问题?我想继续专注于设计我的对象,而不是在此时考虑基础设施问题吗?

3 个答案:

答案 0 :(得分:2)

我想你可能会在错误的地方开始。你说'接下来,我想以某种方式代表课堂上的物理文件' - 为什么?什么测试失败导致需要表示物理文件?

一个问题是你通过公共财产揭露代表 - 这真的是你想要做的吗?或者物理表示是否可以保密,只能通过您选择实施的某些操作进行访问(例如'LoadImage()','GetImageBytes()')?如果它保密,那么测试对于实现来说并不重要。

答案 1 :(得分:1)

在TDD中,正在开发的课程应以外向视角来考虑。图像来自哪里?你打算用图片做什么?显示它?通过网络发送?对它进行一些改造?插入画廊?答案将给出方向。而下一个测试要写。测试应指导设计,而不是Image类。

实际上,对于绘图应用程序,库生成器或电子邮件阅读器,ImageObject将是不同的,因为将使用此类的类具有不同的需求。

答案 2 :(得分:1)

你过分关注这个类的建模,而不是实现一个实际的场景。

imho这对使用TDD时如何解决问题有很大的不同。

这使您无法在课程中添加不必要的元素,并且可以让您在前期分析时间更短的情况下实现更简单的设计。

专注于您需要实施的方案。这样就可以满足您对这些课程的需求以及您需要的课程。

相关问题