2012-01-12 2 views
2

Я только что начал использовать ночные нотки Rhino, и мне трудно это сделать.Ошибка при издевательских вызовах EF

Вот моя функция, которую я пытаюсь проверить.

public bool IsUserExists(string emailAddress) 
{ 
    return _repository.IsUserExists(emailAddress); 
} 

Вот мой тест, который я написал, и в настоящее время неудачи, когда фактический вызов сделан

[TestClass] 
public class UserServiceTest 
{ 
    private MockRepository _mockRepository; 
    private IUserRepository _userRepository; 
    private IUserService _userService; 
    public UserServiceTest() 
    { 
     _mockRepository = new MockRepository(); 
     _userRepository = MockRepository.GenerateMock<IUserRepository>(); 
     _userAccntService = new UserAccntService(); 
    } 

    [TestMethod] 
    public void Should_return_true_IfUserWithEmailExists() 
    { 
     var emailaddress = "[email protected]"; 

     _userRepository.Stub(x => x.IsUserExists(emailaddress)).Return(true); 

     bool ifUserExists = _userAccntService.IsUserAcctExists(emailaddress); // throws! 

     Assert.AreEqual(ifUserExists,true); 

    } 
} 

настоящее время мы используем EF для выполнения вызовов хранилища. И когда я пытаюсь протестировать этот метод, он не работает, когда вызов функции выполняется в действительности. Я получаю ошибку entitycommandexecution в вызове _userAccntService.IsUserAcctExists.

+1

Как создается '_userRepository'? –

+0

где вы вводите '_userRepository' в' _userAccntService'? Как вы создаете '_userAccntService'? Вам нужен полный образец. – BrokenGlass

+0

@ Адам: Я обновил вопрос, извините за это – alice7

ответ

3

Тот факт, что вы получаете ошибку фреймворка сущности, означает, что _repository указывает на фактический экземпляр объекта EF, а _userRepository - макет. Убедитесь, что ваш экземпляр хранилища _userAccntService указывает точно _userRepository.

Другими словами, в вашем методе настройки теста, когда вы строите _userRepository, убедитесь, что это , что получает передается в ваш _userAccntService конструктор.


Так, глядя на обновленный код:

public UserServiceTest() { 
    _mockRepository = new MockRepository(); 
    _userRepository = MockRepository.GenerateMock<IUserRepository>(); 
    _userAccntService = new UserAccntService(); 
} 

_userAccntService никогда не передается _userRepository, так как можно ожидать, чтобы использовать его, когда вы звоните IsUserAcctExists()? Эта зависимость от репозитория должна быть ввела в ваш пример _userAccntService. Что-то вроде:

public UserServiceTest() { 
    _mockRepository = new MockRepository(); 
    _userRepository = MockRepository.GenerateMock<IUserRepository>(); 
    _userAccntService = new UserAccntService(_userRepository); 
} 
+0

Вы были абсолютно правы. Теперь он исправил мою ошибку и прошел тест :) – alice7

+0

@ alice7 - woot! Рад помочь :) –

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