模拟EF调用时出错

时间:2012-01-12 05:15:44

标签: c# unit-testing testing rhino-mocks

我刚刚开始使用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进行存储库调用。 当我试图测试这个方法时,它在实际进行函数调用时失败了。 我在调用_userAccntService.IsUserAcctExists时遇到了entitycommandexecution错误。

1 个答案:

答案 0 :(得分: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);
}