Im, используя FakeItEasy для моделирования методов модульных тестов. Один метод (с использованием параметра REF - может быть, это важно) сохраняет данные в базе данных, поэтому он высмеивал как «ничего не делает», когда используется метод издевательства с параметром ref, assert MustHaveHappened failed
A.CallTo(() => mockedUserRepository.Save(ref mwbeUserData)).DoesNothing();
. Но в этой ситуации в прошлом утверждают, терпит неудачу
A.CallTo(() => mockedUserRepository.Save(ref mwbeUserData)).MustHaveHappened(Repeated.Exactly.Once);
с ошибкой:
Assertion failed for the following call:
MobileWallet.Common.DAL.IMwbeUserRepository.Save(<NULL>)
Expected to find it exactly once but found it #0 times among the calls:
1: MobileWallet.Common.DAL.IMwbeUserRepository.Get(userName: \"AAA\")
2: MobileWallet.Common.DAL.IMwbeUserRepository.Save(user: MobileWallet.Common.Repository.MwbeUserData)
Полный код теста
[TestMethod]
public void AddUser_MwbeUserObjectReturned()
{
//Arrange
MwbeUserRegistrationIn userRegistrationIn = new MwbeUserRegistrationIn()
{
BirthDate = DateTime.Today,
Email = "[email protected]",
FirstName = "Adam",
SecondName = "Ada2",
UserName = "AAA"
};
//mock mockedNotificationService and related:
INotificationService mockedNotificationService = A.Fake<INotificationService>();
//TODO: create notofication service
//mock IMwbeUserRepository and related
IMwbeUserRepository mockedUserRepository = A.Fake<IMwbeUserRepository>();
MwbeReturnData<MwbeUserData> mwbeReturnData = new MwbeReturnData<MwbeUserData>(MwbeResponseCodes.NotFound);
MwbeUserData mwbeUserData = mwbeReturnData.Data;
A.CallTo(() => mockedUserRepository.Get(userRegistrationIn.UserName)).Returns(mwbeReturnData);
A.CallTo(() => mockedUserRepository.Save(ref mwbeUserData)).DoesNothing();
MwbeUserService userService = new MwbeUserService(mockedUserRepository, mockedNotificationService);
//Act
MwbeUser user = userService.AddUser(userRegistrationIn);
//Assert
Assert.IsNotNull(user);
Assert.AreEqual(userRegistrationIn.Email, user.Email);
Assert.AreEqual(userRegistrationIn.UserName, user.UserName);
Assert.AreEqual(userRegistrationIn.FirstName,user.FirstName);
Assert.AreEqual(userRegistrationIn.SecondName, user.SecondName);
Assert.AreEqual(userRegistrationIn.BirthDate, user.BirthDate);
A.CallTo(() => mockedUserRepository.Get(userRegistrationIn.UserName)).MustHaveHappened(Repeated.Exactly.Once);
A.CallTo(() => mockedUserRepository.Save(ref mwbeUserData)).MustHaveHappened(Repeated.Exactly.Once);
}
UPDATE 1:
Пожалуйста, обратите внимание, что для обоих вызовов на это метод Сохранить, значение mwbeUserData - то же самое
MwbeUserData mwbeUserData = mwbeReturnData.Data;
Если это null (но это не так).
Возможно, проблема с синтаксисом для параметра REF? Я читал, что должен использоваться метод под названием AssignsOutAndRefParameters, но я точно не знаю, как его использовать.
Теперь я буду использовать параметр MATCHES, чтобы сделать его более общим.
я считаю, что это произошло потому, что вы утверждаете против 'экземпляра mwbeUserData' ... Пожалуйста, добавьте код' метода AddUser' .. –
пожалуйста добавьте 'реализацию AddUser' –