技术开发 频道

使用Visual Studio 2010特性支持TDD

  3. 测试类的属性

  在我们的需求分析中,我们设想Automobile有两个属性Model和TopSpeed,在Automobile类的默认构造函数中,这两个属性应该被分别初始化为“Not specified”和-1。我们可以在测试函数中添加如下的语句对这两个属性是否被正确地初始化进行测试:

Assert.IsTrue(myAuto.Model == "Not specified" && myAuto.TopSpeed == -1 );


  同样地,当我们完成了上述代码的输入后,Model和TopSpeed下很快就出现了红色的波浪线,系统提示我们Automobile类没有这两个属性。按照“即用即产生”的原则,我们可以即时为Automobile类创建这两个属性:


图6 创建类的属性

  4. 测试类的构造函数

  在测试项目中,我们新建一个测试方法AutomobileWithModelNameCanStart,在这个方法中,我们以指定的model和topspeed创建一个新的Automobile对象。

[TestMethod]
        
public void AutomobileWithModelNameCanStart()
        {
            
string model = "550 Barchetta";
            
int topSpeed = 199;
            Automobile myAuto
= new Automobile(model, topSpeed);
        }

  同样,我们利用“即用即生成”的特性为Automobile类生成新的构造函数。在这里我们可以发现“即用即生成”功能非常“聪明”,它会根据这个构造函数的使用情况,自动检查参数的类型,然后也会根据参数的名字,选择合适的属性来存储参数的数据。例如在Automobile类中,它就分别选择了前面我们添加的两个属性Model和TopSpeed来存储构造函数的两个参数。

public Automobile(string model, int topSpeed)
        {
            
// TODO: Complete member initialization
            this.Model = model;
            
this.TopSpeed = topSpeed;
        }

  这时我们注意到,当新的构造函数添加后,原有的默认构造函数就没有意义了,在DefaultAutomobileIsInitializedCorrectly测试方法中我们使用了默认构造函数,这时就会出现红色的波浪线提示,不过没有关系,我们可以用“即用即产生”马上为它创建一个默认的构造函数。  

  5. 测试类的成员函数
 
  在需求分析中,我们的Automobile类应该具有一个成员函数Start()和一个属性IsRunning,分别用来启动我们的Automobile和判断它是否正在运行。我们编写Start()函数和IsRunning属性的测试程序如下:

myAuto.Start();
Assert.IsTrue(myAuto.IsRunning
== true);

  因为这两者并没有在Automobile类中实现,所以我们利于“即用即产生”功能,在Automobile类中添加成员函数Start()和属性IsRunning。
 
  到这里,我们的测试程序就全部编写完成了,与此同步的是,我们的目标类Automobile也已经搭建好框架,初具雏形了。并且,更加重要的是,Automobile类的创建是完全基于它的使用情况而创建的,这样就避免了在开发后期因为测试无法通过而修改类的设计。

0
相关文章