Объектные службы может быть сложно использовать при написании юнит-теста. К сожалению, не существует хорошего интерфейса для макета для ObjectQuery<T>
, как вы выяснили. Чтобы справиться с этим сценарием, я создал класс-оболочку по шаблону Repository для инкапсуляции моего ObjectContext
и создал класс-оболочку для инкапсуляции ObjectQuery<T>
:
public interface IMyObjectQuery<T> : IOrderedQueryable<T>
{
IMyObjectQuery<T> Include(string path);
}
public class MyObjectQuery<T> : IMyObjectQuery<T>
{
private ObjectQuery<T> _query;
public MyObjectQuery(ObjectQuery<T> query)
{
_query = query;
}
IMyObjectQuery<T> Include(string path)
{
//There is probably a better way to do this
//but you get the idea
return new MyObjectQuery(_query.Include(path));
}
//Implement IQueryable, IEnumerable...
}
И тогда это вопрос реализации оболочки Repository для вашего ObjectContext. Здесь является ссылкой, с которой можно начать.
Добавить что-то вроде этого:
public class MyRepository : IMyRespository
{
...
public IMyObjectQuery<T> CreateQuery<T>()
{
return new MyObjectQuery(_context.CreateQuery<T>());
}
...
}
Вероятно, это не простое решение, которое вы искали, поскольку это не тривиальная задача. Я думаю, что вы обнаружите, что если вы этого не сделаете, вы будете продолжать сталкиваться с трудностями при написании тестов.