gpt4 book ai didi

c# - 模拟 EF 调用时出错

转载 作者:行者123 更新时间:2023-11-30 22:32:13 25 4
gpt4 key购买 nike

我刚开始使用 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 时遇到实体命令执行错误。

最佳答案

您收到 Entity Framework 错误的事实意味着 _repository 指向 EF 对象的实际实例,而 _userRepository 是一个模拟。确保您的 _userAccntService 的存储库实例准确指向 _userRepository

换句话说,在您的测试设置方法中,当您构造 _userRepository 时,请确保那是传递给您的_userAccntService 构造函数的内容。


因此,查看更新后的代码:

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

_userAccntService 从未传递给 _userRepository,那么当您调用 IsUserAcctExists() 时怎么可能期望使用它呢?此存储库依赖项需要注入(inject)到您的_userAccntService 实例中。像这样的东西:

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

关于c# - 模拟 EF 调用时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8830450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com