我有一个 Fitnesse RowFixture,它返回业务对象列表。该对象有一个浮点数字段,表示 0 到 1 之间的百分比。这 消费者 业务对象的内容将是来自设计者的网页或报告,因此百分比的格式将由设计者而不是业务对象决定。

如果页面能够模拟设计者将数字转换为百分比(即,百分比),那就更好了。它不应显示 0.5,而应显示 50%。但我不想用显示代码污染业务对象。有没有办法在 RowFixture 中指定格式字符串?

有帮助吗?

解决方案

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

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

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top