Как вице-президент по технологии в IdeaBlade это не для меня вообще прокомментировать ограничения DevForce и преимущества в этом пространстве. Счастлив ответить на конкретные вопросы.
Можно ли его проверить? На это я могу ответить с началом ответа.
Это потенциально спорный вопрос. У людей есть сильные чувства относительно того, что делает что-то проверяемым. Позвольте мне ограничиться конкретными сценариями тестирования .. и затем вы судите о степени, в которой мы отвечаем вашим требованиям тестирования.
1) DevForce поддерживает чистые объекты POCO, если это ваше предпочтение. Большинство людей предпочтут использовать сущности, которые происходят из нашего базового класса Entity, поэтому я полностью ограничу свои последующие замечания этими сущностями.
2) Вы можете создать такой объект, используя любой ctor, который вам нравится, и получить и установить его (не-навигационные) свойства без какой-либо другой настройки.
var cust = new Customer {ID=..., Name =...}; // have fun
Необходимы, конечно, ссылки на сборку.
3) Чтобы проверить свои свойства навигации (свойства, возвращающие другие объекты), вы сначала создадите EntityManager (наш блок-интерфейс, контекстно-подобный контейнер), добавьте или присоедините объекты к EM, и вы идти. Свойства навигации объектов, наследуемых от нашего базового класса, предполагают найти связанные объекты через этот контейнер.
4) В большинстве автоматизированных тестов EntityManager будет создан в отключенном состоянии, чтобы он никогда не пытался достичь сервера или базы данных.
Вы можете добавить к нему заказ, заказчик, некоторые OrderDetails; обратите внимание, что все они построены в контексте ваших тестов ... не извлекаются из любого места.
Теперь заказ.Клиент возвращает тест Клиенту; order.OrderDetails возвращает ваши данные теста. Ваша подготовка состоит из создания EM, тестовых объектов, гарантирующих, что эти объекты имеют уникальные идентификаторы и связаны.
Ниже приведен пример последовательности:
var mgr = new EntityManager(false); // create disconnected
var order = new Order {ID = ..., Quantity = 1, ...};
var customer = new Customer {ID = 42, Name = "ABC", };
mgr.AttachEntity(order);
mgr.AttachEntity(customer);
order.Customer = customer; // associate them
ЭМ действует в качестве базы данных в оперативной памяти.
5) Вы можете использовать Linq Теперь
var custs = mgr.Customers.Where(c => c.Name.StartsWith("A").ToList();
var orders = mgr.Orders.Where(o => o.Customer.Name.StartsWith("A")).ToList();
6) Конечно, я всегда создаю новый EntityManager перед каждым испытанием для того чтобы исключить загрязнение окружающей среды кросс-тестирования.
7) Я часто пишу так называемый тестовый класс-помощник «Материнская мать», чтобы заполнить EM стандартной коллекцией тестовых данных, включая девиантные случаи.
8) Я могу экспортировать кеш сущности EntityManager тестовых объектов в файл или ресурс тестового проекта.Когда тесты выполняются, DataMother может извлекать и восстанавливать эти объекты тестирования.
Обратите внимание, что я постепенно продвигаюсь от тестирования модулей и к интеграционным испытаниям. Но (пока) мои тесты не требуют доступа к серверу, или Entity Framework, или к базе данных. Они работают быстро, и они менее уязвимы, чтобы отвлекать неудачи установки.
Конечно, вы можете получить на сервере глубокие интеграционные тесты, и вы можете легко переключаться между серверами и базами данных для локальных, локальных и веб-сценариев.
9) Вы можете перехватывать запрос, сохранять, изменять, добавлять, удалять и другие события для тестирования взаимодействия.
10) Все, что я описал, работает как в обычном .NET, так и в Silverlight и с каждой тестовой инфраструктурой, с которой я столкнулся.
С другой стороны, я бы не стал описывать наш продукт как макет.
Я с готовностью признаю, что мы не являемся Настойчивостью Невежественной (PI). Если вы фанатик PI, мы ошибаемся для вас.
Мы стараемся оценить важные преимущества PI и сделать все возможное, чтобы реализовать их в нашем продукте. Мы делаем то, что можем, чтобы исключить из соображений карьеры. Тем не менее, как вы видите, наша абстракция протекает в нескольких местах. Например, мы добавим эти элементы к общественному API ваших сущностей:
- EntityAspect (шлюз упорство осведомленности)
- ErrorsChanged
- PendingEntityResolved
- PropertyChanged
- ToQuery <>
Лично я бы отрезал это до двух (EntityAspect, PropertyChanged); другие прогуливались мимо меня. Для чего это стоит, унаследовав от Object (как вам должно), вносятся другие посторонние пять.
Мы чувствуем, что мы создали хорошие компромиссы между чистым П.И. и легкость развития.
Мой вопрос: «Он дает вам то, что вам нужно, чтобы оправдать ожидания без большого трения ... по всему спектру от тестирования единицы измерения до глубины?»
Мне любопытно узнать, как получить подобный объект с меньшим трением с аналогичными продуктами. И желаем принять предложения о том, как мы можем улучшить нашу поддержку тестирования приложений.
Не стесняйтесь следить за вопросами, связанными с другими сценариями тестирования, которые я, возможно, забыл.
Надеется, что это помогает
Уорду
Спасибо за ваш ответ, это очень хорошо, и он убедил меня, по крайней мере оценить продукт. Я бы не сделал этого иначе, потому что я научился игнорировать ключевые слова, и его описание в основном гудит. Мое самое большое беспокойство - его потенциальная нехватка гибкости. Мне нравится тестировать «интересную функциональность» до конца. Когда это невозможно, я определяю некоторые границы, чтобы «конец» был ясен.В последние месяцы, работая над умным клиентом, границы были графическим интерфейсом и слоем данных (из-за тонкостей в тестировании EF), но я смотрю белый проект, чтобы вывести границу в графический интерфейс WPF. –