我刚刚开始使用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错误。
答案 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);
}