2009-07-08 3 views
0

Я работаю над старой системой, которая использует хранимые procs, бизнес-объекты и DTO: s. Бизнес-объекты и DTO: часто имеют одинаковые свойства. При вызове метода на уровне сервиса, который возвращает DTO, происходит много преобразований. Сохраненный proc -> dataset -> бизнес-объект -> DTO. Если добавлено новое свойство, иногда бывает, что разработчик забывает добавлять код, который перемещает его из одного слоя/объекта в другой.Как проверить, что каждое свойство в объекте установлено/задано значение?

В некоторых частях системы я решил это с помощью AutoMapper, который будет автоматически проецировать свойства с тем же именем.

Мой вопрос касается других частей. Могу ли я как-то написать единичный тест, который проверяет, установлено ли каждое свойство в объекте/задано значение? Таким образом, я мог бы написать интеграционный тест, который вызывает наш сервисный уровень, и все преобразования должны быть успешными для прохождения теста.

Я предполагаю, что решение будет включать отражение.

ответ

0

Отражение - это один из способов, но у него есть свои предостережения, если вы установили свойство в значение по умолчанию, вы не сможете узнать, что он был установлен.

Вы можете перехватить реальный прокси-сервер, а затем прослушать все изменения свойств. See the code here для базового перехватчика, который вы можете использовать. Обратите внимание, что перехватчики означают, что ваш объект должен быть MarshalByRefObject, который может быть не таким, каким вы хотите. Таким образом, другой вариант заключается в том, чтобы сообщить вашей фабрике об завершении объекта, прежде чем он вернет его в тестовом сценарии. Что-то, что ninject или многие другие инверсии управляющих библиотек позволят вам сделать.

+0

Верно о значениях по умолчанию. Сегодня мы не используем контейнер IoC, но потребность увеличивается с каждым днем. – jimmystormig

0

Да, рефлексией будет путь.

Возможно, лучше всего выполнить единичный тест с некоторыми макетными объектами, поэтому у вас есть известное значение для проверки.

0

Возможно, вы можете изменить свои BO/DTO для реализации интерфейса INotifyPropertyChanged. Таким образом, вы можете настроить некоторых слушателей, чтобы сообщить вашему модулю/интеграции, какие свойства были изменены.

В прослушивателе вы сохраняете список всех измененных свойств и с отражением, которое вы можете проверить, есть дополнительные свойства, которых нет в списке.

Смежные вопросы