您当然不想仅仅为了让您的测试看起来更好而修改您的业务逻辑。不过好消息是,有一种方法可以做到这一点,它并不难,但不像传递格式说明符那么容易。
尝试将您的 Fit Fixture 视为 FitNesse 和您的应用程序代码之间的服务边界。如果您的 SUT(S系统 Under Test) 变化。
让我们看一下您的业务对象的简化版本:
public class BusinessObject
{
public float Percent { get; private set; }
}
由于 RowFixture 的工作方式,我们需要定义一个简单的对象来作为合约工作。通常我们会使用一个接口,但这并不能满足我们的目的,所以一个简单的 DTO (Data Ttransfer Object) 就足够了。
类似这样的:
public class ReturnRowDTO
{
public String Percent { get; set; }
}
现在我们可以定义一个 RowFixture 来返回我们自定义 DTO 对象的列表。我们还需要创建一种将 BusinessObjects 转换为 ReturnRowDTO 的方法。我们最终得到一个看起来像这样的 Fixture。
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。希望这会有所帮助。