2015-03-04 1 views
1

У меня есть репозиторий, который я издевался с использованием Moq.Смысл репозитория и вопрос обратного вызова

У меня есть служба, которую я издевался. Служба ожидает репозиторий в своем конструкторе, и я успешно смог это сделать.

Проблема, с которой я столкнулся сейчас, заключается в том, что я хочу, чтобы репозиторий не подключался к БД, а вместо этого использовал хранилище в памяти для запроса/выполнения операций.

, если я это сделать:

userMockRepository.Setup(r => r.Login(It.IsAny<string>(), It.IsAny<string>())) 
        .Returns((User u) => users.Find(p => p.Password == u.Password && 
                 p.Username == u.Username)); 

затем запустить тест, я получаю исключение:

Количество параметров рассогласования

когда Сервисный метод который вызывается, когда о для вызова входа в UserRepository.

Что я делаю неправильно? Я не понимаю?

По существу любые Repository вызовы должны быть переадресованы или запрос против в сборе памяти (т.е. список)

это мой фактический метод обслуживания слой:

var user = uoWContext.UserRepository.Login(request.Username, request.Password); 

if (user == null) 
{ 
    response.Success = false; 
    response.FailureInformation = "Invalid username or password"; 
} 

return response; 

Когда он попадает в линию uowContext.UserRepository.Login(...) - это где я получаю исключение.

ответ

1

Оно должно быть:

userMockRepository.Setup(r => r.Login(It.IsAny<string>(), It.IsAny<string>())) 
        .Returns((string pw, string un) => users.Find(u => u.Password == pw && u.Username == un)); 

        // or 

        .Returns<string, string>((pw, un) => users.Find(u => u.Password == pw && u.Username == un)); 

Аргументы Setup() должны соответствовать аргументам Return().

+0

Ах! Спасибо .. –

+0

Еще один - когда у меня есть резервное хранилище списка , и я настраиваю метод для выполнения обратного вызова, добавляя элемент в коллекцию - при следующем добавлении элемента я вижу, что не было элементы, добавленные ранее в коллекцию. Как мне сделать так, чтобы сборник сохранялся в модульных тестах? У меня есть репозиторий и IQueyable , если это помогает. (Контекст: AddItem) –

+0

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

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