我正在使用Rhino Mock 3.6 Repository和Nhibernate。但是我得到ExpectationViolationException预期#0,实际#1。我花了两天时间。我不知道我做错了什么。这是我的代码。我在mockRepository.Save(用户)行上遇到错误。
var username = "abcdef";
var mocks = new MockRepository();
var validationResults = new ValidationResults();
IDataQuery query = mocks.StrictMock<IDataQuery>();
UserRepository mockRepository = mocks.StrictMock<UserRepository>(query);
var user = mocks.StrictMock<User>();
user.FirstName = "javed";
user.LastName = "ahmad";
user.UserName = "abc";
user.Password = "password";
user.Email = "nadeem@test.com";
user.IsActive = true;
user.CreatedBy = 1000000;
user.CreatedDate = DateTime.Today;
user.ModifiedBy = 1000000;
user.ModifiedDate = DateTime.Today;
Expect.Call(user.Validate()).Return(validationResults);
mocks.ReplayAll();
mockRepository.Save(user);
先谢谢。
由于 姆兰
答案 0 :(得分:6)
您正在使用StrickMock,这意味着唯一被认为有效的呼叫是您为Expectations设置的呼叫。由于您未设置将Save
调用的期望,因此您收到错误。
答案 1 :(得分:1)
通常这意味着RhinoMock希望您调用user.Validate()一次,但是您调用该方法两次。您可以检查是否只调用一次方法或更改
Expect.Call(user.Validate())返回(validationResults);
到
Expect.Call(user.Validate())返回(validationResults).Repeat.Twice();
答案 2 :(得分:0)
你似乎在嘲笑所有东西,甚至是sut,即userrepository 您应该在将在userrepository中使用的接口上设置模拟。你需要将它们传递给userrepository,以某种方式覆盖它们的默认行为。
您需要决定实际要测试的内容。
上面的代码暗示了以下内容
class UserRepository
{
public void Save(IUser user)
{
validationResult = user.Validate();
if (validationResult==null)
{
dal.Save(user);
}
}
}
这只是一个猜测,但关键是你目前的代码应该只是模仿用户,如果你打算测试在userrepository.save方法中调用validate方法