我有一个返回业务对象列表的Fitnesse RowFixture。该对象具有一个表示0到1之间的百分比的浮动字段。业务对象的消费者将是来自设计者的网页或报表,因此百分比的格式将由设计者决定而不是业务对象。在Fitnesse RowFixture中格式化数据
如果页面可以在将数字转换为百分比时仿效设计者,而不是显示0.5,则它应该显示50%。但我宁愿不用显示代码污染业务对象。有没有办法在RowFixture中指定格式字符串?
我有一个返回业务对象列表的Fitnesse RowFixture。该对象具有一个表示0到1之间的百分比的浮动字段。业务对象的消费者将是来自设计者的网页或报表,因此百分比的格式将由设计者决定而不是业务对象。在Fitnesse RowFixture中格式化数据
如果页面可以在将数字转换为百分比时仿效设计者,而不是显示0.5,则它应该显示50%。但我宁愿不用显示代码污染业务对象。有没有办法在RowFixture中指定格式字符串?
您当然不想修改您的业务逻辑,只是为了让您的测试看起来更好。好消息是,有一种方法可以做到这一点并不困难,但不像传入格式说明符那么简单。
尝试将Fit Fixture视为FitNesse和您的应用程序代码之间的服务边界。要定义一个合同,这并不一定需要改变,如果你的SUT(小号 ystem ü的nDer 牛逼 EST)变更的实施细节。
让我们看看你的业务对象的一个简化版本:
public class BusinessObject
{
public float Percent { get; private set; }
}
监守的方式,一个RowFixture工作,我们需要定义一个简单的对象,将作为合同。通常我们会用一个接口,但不会为我所用这里这么简单DTO(d 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测试。希望这可以帮助。
我不确定“污染”是什么。要么是要求您的业务对象返回一个以百分比表示的值,在这种情况下,您的业务对象应该提供 - 或者 - 您正在测试响应的真实值作为float,您现在拥有该值。
试图让fitnesse按摩值的可读性似乎有点奇怪。