我有一个返回业务对象列表的Fitnesse RowFixture.该对象有一个字段,它表示一个介于0和1之间的百分比.业务对象的使用者将是来自设计者的网页或报告,因此百分比的格式将取决于设计者而不是业务对象.
如果页面在将数字转换为百分比时模拟设计器会更好,即不显示0.5,它应该显示50%.但我宁愿不用显示代码污染业务对象.有没有办法在RowFixture中指定格式字符串?
您当然不想仅仅为了使测试看起来更好而修改业务逻辑。不过,好消息是,有一种方法可以完成此任务,该方法并不困难,但不像传递格式说明符那么容易。
尝试将您的 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,而不会破坏实际的适合度测试。希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
1758 次 |
| 最近记录: |