我有一个 Fitnesse RowFixture,它返回业务对象列表。该对象有一个浮点数字段,表示 0 到 1 之间的百分比。consumer业务对象的内容将是来自设计者的网页或报告,因此百分比的格式将由设计者而不是业务对象决定。
如果页面能够模拟设计者将数字转换为百分比,即不显示 0.5,而是显示 50%,那就更好了。但我不想用显示代码污染业务对象。有没有办法在 RowFixture 中指定格式字符串?
您当然不想仅仅为了使测试看起来更好而修改业务逻辑。不过,好消息是,有一种方法可以完成此任务,该方法并不困难,但不像传递格式说明符那么容易。
尝试将您的 Fit Fixture 视为 FitNesse 和您的应用程序代码之间的服务边界。您想要定义一个合同,如果您的实施细节不一定需要更改SUT (System Under Test)改变。
让我们看一下业务对象的简化版本:
public class BusinessObject
{
public float Percent { get; private set; }
}
由于 RowFixture 的工作方式,我们需要定义一个简单的对象来充当契约。通常我们会使用一个接口,但这并不能满足我们的目的,所以一个简单的DTO (Data Transfer O对象)就足够了。
像这样的东西:
public class ReturnRowDTO
{
public String Percent { get; set; }
}
现在我们可以定义一个 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("%")};
}
}
现在,您可以更改基础 BusinessObjects,而不会破坏实际的适合度测试。希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)