我有一个返回业务对象列表的Fitnesse RowFixture。该对象有一个字段,它表示一个介于0和1之间的百分比。业务对象的使用者将是来自设计者的网页或报告,因此百分比的格式将取决于设计师而不是业务对象。
如果页面在将数字转换为百分比时模拟设计器会更好,即不显示0.5,它应该显示50%。但我宁愿不用显示代码污染业务对象。有没有办法在RowFixture中指定格式字符串?
答案 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按摩价值以提高可读性似乎有点奇怪。