Вопрос

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

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

Это было полезно?

Решение

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

Попробуйте представить себе Fit Fixture как границу обслуживания между FitNesse и кодом вашего приложения.Вы хотите определить контракт, который не обязательно будет меняться, если детали реализации вашего СУТ (Ссистема тындер Тесть) изменить.

Давайте посмотрим на упрощенную версию вашего бизнес-объекта:

public class BusinessObject
{
    public float Percent { get; private set; }
}

Из-за того, как работает RowFixture, нам нужно определить простой объект, который будет работать как контракт.Обычно мы бы использовали интерфейс, но он не будет служить нашей цели, поэтому простой DTO (Дата Тпередача Облин) будет достаточно.

Что-то вроде этого:

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, не нарушая при этом фактические тесты на соответствие.Надеюсь это поможет.

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top