2008-09-19 67 views
6

我有一个返回业务对象列表的Fitnesse RowFixture。该对象具有一个表示0到1之间的百分比的浮动字段。业务对象的消费者将是来自设计者的网页或报表,因此百分比的格式将由设计者决定而不是业务对象。在Fitnesse RowFixture中格式化数据

如果页面可以在将数字转换为百分比时仿效设计者,而不是显示0.5,则它应该显示50%。但我宁愿不用显示代码污染业务对象。有没有办法在RowFixture中指定格式字符串?

回答

3

您当然不想修改您的业务逻辑,只是为了让您的测试看起来更好。好消息是,有一种方法可以做到这一点并不困难,但不像传入格式说明符那么简单。

尝试将Fit Fixture视为FitNesse和您的应用程序代码之间的服务边界。要定义一个合同,这并不一定需要改变,如果你的SUT小号 ystem ü的nDer 牛逼 EST)变更的实施细节。

让我们看看你的业务对象的一个​​简化版本:

public class BusinessObject 
{ 
    public float Percent { get; private set; } 
} 

监守的方式,一个RowFixture工作,我们需要定义一个简单的对象,将作为合同。通常我们会用一个接口,但不会为我所用这里这么简单DTOd ATA 牛逼转让(BOT)Ø bject)就足够了。

是这样的:

public class ReturnRowDTO 
{ 
    public String Percent { get; set; } 
} 

现在,我们可以定义一个RowFixture将返回我们的定制DTO对象的列表。我们还需要创建一种将BusinessObjects转换为ReturnRowDTO的方法。我们最终得到了一个像这样的Fixture。

public class ExampleRowFixture: fit.RowFixture 
    { 
     private ISomeService _someService; 

     public override object[] Query() 
     { 
      BusinessObject[] list = _someService.GetBusinessObjects(); 

      return Array.ConvertAll(list, new Converter<BusinessObject, ReturnRowDTO>(ConvertBusinessObjectToDTO)); 
     } 

     public override Type GetTargetClass() 
     { 
      return typeof (ReturnRowDTO); 
     } 

     public ReturnRowDTO ConvertBusinessObjectToDTO(BusinessObject businessObject) 
     { 
      return new ReturnRowDTO() {Percent = businessObject.Percent.ToString("%")}; 
     } 
    } 

您现在可以更改基础BusinessObjects而不会破坏实际的Fit测试。希望这可以帮助。

0

我不确定“污染”是什么。要么是要求您的业务对象返回一个以百分比表示的值,在这种情况下,您的业务对象应该提供 - 或者 - 您正在测试响应的真实值作为float,您现在拥有该值。

试图让fitnesse按摩值的可读性似乎有点奇怪。