在Fitnesse RowFixture中格式化数据

Ben*_*ton 7 fitnesse

我有一个返回业务对象列表的Fitnesse RowFixture.该对象有一个字段,它表示一个介于0和1之间的百分比.业务对象的使用者将是来自设计者的网页或报告,因此百分比的格式将取决于设计者而不是业务对象.

如果页面在将数字转换为百分比时模拟设计器会更好,即不显示0.5,它应该显示50%.但我宁愿不用显示代码污染业务对象.有没有办法在RowFixture中指定格式字符串?

Jos*_*osh 4

您当然不想仅仅为了使测试看起来更好而修改业务逻辑。不过,好消息是,有一种方法可以完成此任务,该方法并不困难,但不像传递格式说明符那么容易。

尝试将您的 Fit Fixture 视为 FitNesse 和您的应用程序代码之间的服务边界。您想要定义一个合同,如果您的 SUT(待测系统实现细节发生变化该合同不一定需要更改。

让我们看一下业务对象的简化版本:

public class BusinessObject
{
    public float Percent { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

由于 RowFixture 的工作方式,我们需要定义一个简单的对象来充当契约。通常我们会使用一个接口,但这不能满足我们的目的,因此一个简单的DTO 数据传输对象就足够了。

像这样的东西:

public class ReturnRowDTO
{
    public String Percent { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我们可以定义一个 RowFixture,它将返回我们的自定义 DTO 对象的列表。我们还需要创建一种将 BusinessObject 转换为 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("%")};
        }
    }
Run Code Online (Sandbox Code Playgroud)

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