在Fitnesse RowFixture中格式化数据

时间:2008-09-19 14:03:39

标签: fitnesse

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

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

2 个答案:

答案 0 :(得分:3)

您当然不希望修改您的业务逻辑只是为了让您的测试看起来更好。然而,好消息是,有一种方法可以实现这一点并不困难,但并不像传递格式说明符那么容易。

尝试将Fit Fixture视为FitNesse与应用程序代码之间的服务边界。如果 SUT 的实施细节( S 系统 U nder >,您希望定义一个不一定需要更改的合同T est)改变。

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

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

由于RowFixture的工作方式,我们需要定义一个可以作为契约的简单对象。通常我们会使用一个界面,但这不符合我们的目的,所以一个简单的 DTO D ata T ransfer O bject)就足够了。

像这样:

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。希望这会有所帮助。

答案 1 :(得分:0)

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

试图让fitnesse按摩价值以提高可读性似乎有点奇怪。