Вы, конечно, не хотите изменять свою бизнес-логику просто для того, чтобы ваши тесты выглядели лучше. Хорошие новости, однако, есть способ сделать это, что не сложно, но не так просто, как передача спецификатора формата.
Старайтесь думать о своем Fit Fixture как о границе обслуживания между FitNesse и кодом вашего приложения. Вы хотите определить контракт, который не обязательно должен изменяться, если детали реализации вашего SUT ( S ystem U nder T есть) измениться.
Давайте посмотрим на упрощенную версию вашего бизнес-объекта:
public class BusinessObject
{
public float Percent { get; private set; }
}
В связи с тем, как работает RowFixture, нам нужно определить простой объект, который будет работать как контракт. Обычно мы использовали бы интерфейс, но это не будет служить нашей цели, поэтому простой DTO ( D ata T перевод 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, не нарушая фактические Fit-тесты. Надеюсь, это поможет.