在Fitnesse RowFixture中格式化数据
时间:2020-03-06 14:26:04 来源:igfitidea点击:
我有一个Fitnesse RowFixture,它返回业务对象列表。该对象的字段是一个浮点数,表示介于0和1之间的百分比。业务对象的使用者将是来自设计者的网页或者报表,因此,百分比的格式取决于设计者,而不是设计者业务对象。
如果页面可以在将数字转换为百分比时模仿设计器,那就更好了,即,应该显示50%,而不是显示0.5. 但是我宁愿不使用显示代码污染业务对象。有没有一种方法可以在RowFixture中指定格式字符串?
解决方案
我不确定"污染"是什么。或者要求业务对象返回一个以百分比表示的值,在这种情况下,业务对象应提供-OR,我们正在测试响应的真实值是否为浮点型,现在已经有了。
试图让Fitnesse按摩可读性的值似乎有点奇怪。
我们当然不希望仅仅为了使测试看起来更好而修改业务逻辑。然而,好消息是,有一种方法可以做到这一点并不难,但不如传递格式说明符那么容易。
尝试将Fit Fixture视为FitNesse与应用程序代码之间的服务边界。我们想定义一个合同,如果SUT(被测系统)的实施细节发生变化,则不必更改。
让我们看一下业务对象的简化版本:
public class BusinessObject
{
public float Percent { get; private set; }
}
由于RowFixture的工作方式,我们需要定义一个将作为合同的简单对象。通常,我们将使用一个接口,但这在这里不会达到我们的目的,因此简单的DTO(数据传输对象)就足够了。
像这样的东西:
public class ReturnRowDTO
{
public String Percent { get; set; }
}
现在,我们可以定义一个RowFixture,它将返回自定义DTO对象的列表。我们还需要创建一种将BusinessObjects转换为ReturnRowDTO的方法。我们最终得到了一个看起来像这样的灯具。
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 Test。希望这可以帮助。

