Ошибка при издевательстве над вызовами EF - PullRequest
2 голосов
/ 12 января 2012

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

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

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 = "noreply@abc.com";

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

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

        Assert.AreEqual(ifUserExists,true);

    }
}

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

1 Ответ

3 голосов
/ 12 января 2012

Тот факт, что вы получаете ошибку структуры сущностей, означает, что _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);
}
...