而MSpec用了自己的名词,分别是Establish, Because, It。看看下面改造之后的测试代码清楚什么意思了。

  看代码:

public class When_create_an_exam_by
  {
      private Establish context =
          () =>
              {
                  stub_exam_def = new ExamDef("98");
                  stub_district = new District("01");
                  stub_date = new Date(2011, 1, 1);
              };
 
      private Because of =
          () => subject = new Exam(stub_district, stub_exam_def, stub_date);
 
      private It should_assign_to_properties =
          () =>
              {
                  subject.District.ShouldEqual(stub_district);
                  subject.ExamDef.ShouldEqual(stub_exam_def);
                  subject.Date.ShouldEqual(stub_date);
              };
 
      private static ExamDef stub_exam_def;
      private static District stub_district;
      private static Date stub_date;
      private static Exam subject;
  }

  再看一看测试运行的结果,明了代码即文档的含义了。

  看截图:

  从nUnit升级到MSpec,给人一种耳目一新的感觉。开始也许会有些不习惯。但是,一旦习惯之后再也不想回头了。

  Rhino Mock --- 我演我

  好了,看看第二个问题。一开始,我们依乎不觉得这是个大问题,不是直接创建一个依赖美吗,创建完了呗,一行代码而已。仍然,需要提醒注意,我们是在做商业软件。一旦展开了,一个类不可能只是一、两个类,特别是间接关联的,会更多,拔出萝卜带出泥。拿这个考试类来说,在我们的实际项目中,它还有考试科目列表属性,还通过报考类与考生有间接联系。而报考类又与订单类,事务类有交互有关系。考虑所有这些级联关系,难道我为了测试这个构造赋值功能把所有的类全部创建出来?