Разрушил мне голову на этот раз, чтобы отдать это толпе: кто-нибудь знает, как успешно установить Mole (или любой другой метод тестирования юнитов) для Join in Linq?
В частностиэтот конкретный проект использует Linq to Sql.Фактически, я впервые использую Linq для Sql и пытаюсь продемонстрировать эффективное и правильное модульное тестирование.У меня есть метод, который тянет TableA и TableB, которые связаны внешним ключом, чтобы создать объект передачи данных, в основном смоделированный на TableA.Код не совсем точен, так как мне пришлось оставить его на работе.
public List<TableADto> GetTableA()
{
using (MyDataContext context = new MyDataContext)
{
var query = from a in context.a
join b in context.b on a.ForeignId equals b.ForeignId
select MyBuilderClass.CreateTableADto(a, b);
return query.ToList();
}
}
Я считаю код довольно элегантным в своем роде, и он прекрасно работает при тестировании системы.Но я не могу понять, как его тестировать.У меня есть опытный пользователь Moles для настройки объездных путей.Для запроса из одной таблицы я могу просто поставить моль на
System.Linq.Data.Moles.MTable<TableA>.AllInstances.GetEnumerator = ...
. Для нескольких таблиц я нахожу, что мне также нужно создать заглушку IQueryProvider, и мне нужно заглушить методы CreateQuery.Но даже при этом я также получаю сообщение об ошибке, в котором говорится, что CreateExpression не заглушена.Я пробовал
MTable<TableA>.AllInstances.CreateQueryExpression = (Expression e) => { return listA.AsQueryable().Provider; }
MTable<TableA>.AllInstances.CreateQueryExpression01(Expression e => listA.AsQueryable().Provider; }
MTable<TableA>.AllInstances.CreateQueryExpression<TableB> = (Expresion e) => { return listB.AsQueryable().Provider; }
// MTable<TableA>.AllInstances.CreateQueryExpression<Tablea> = (Expresion e) => { return listA.AsQueryable().Provider; } /* REDUNDANT WITH THE FIRST ONE */