Форматирование данных в Fitnesse RowFixture - PullRequest
6 голосов
/ 19 сентября 2008

У меня есть Fitnesse RowFixture, которая возвращает список бизнес-объектов. У объекта есть поле, которое представляет собой число с плавающей точкой, представляющее процент от 0 до 1. потребитель бизнес-объекта будет веб-страницей или отчетом, полученным от дизайнера, поэтому форматирование процента будет до дизайнера, а не бизнес-объекта.

Было бы лучше, если бы страница могла эмулировать конструктор при преобразовании числа в процент, т.е. вместо отображения 0,5, она должна отображать 50%. Но я бы предпочел не загрязнять бизнес-объект отображаемым кодом. Есть ли способ указать строку формата в RowFixture?

Ответы [ 2 ]

3 голосов
/ 20 сентября 2008

Вы, конечно, не хотите изменять свою бизнес-логику просто для того, чтобы ваши тесты выглядели лучше. Хорошие новости, однако, есть способ сделать это, что не сложно, но не так просто, как передача спецификатора формата.

Старайтесь думать о своем 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-тесты. Надеюсь, это поможет.

0 голосов
/ 19 сентября 2008

Я не уверен, что такое "загрязнение". Либо требуется, чтобы ваш бизнес-объект возвращал значение, выраженное в процентах, и в этом случае ваш бизнес-объект должен предлагать -ИЛИ- вы проверяете истинное значение ответа в виде числа с плавающей запятой, которое у вас есть сейчас.

Пытаться найти подходящее средство для массажа значения читабельности кажется немного странным.

...