在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。希望这可以帮助。