Я пытаюсь создать простой модульный тест с использованием фреймворка Ninject Moq, и по какой-то причине я не могу заставить метод установки работать правильно. Насколько я понимаю, приведенный ниже метод установки должен внедрить репозиторий в класс Service с предопределенным результатом true.
[TestFixture]
public class ProfileService : ServiceTest
{
private readonly Mock<IRepository<Profile>> _profileRepoMock;
public ProfileService()
{
MockingKernel.Bind<IProfileService>().To<Data.Services.Profiles.ProfileService>();
_profileRepoMock = MockingKernel.GetMock<IRepository<Profile>>();
}
[Test]
public void CreateProfile()
{
var profile = new Profile()
{
Domain = "www.tog.us.com",
ProfileName = "Tog",
};
_profileRepoMock.Setup(x => x.SaveOrUpdate(profile)).Returns(true);
var profileService = MockingKernel.Get<IProfileService>();
bool verify = profileService.CreateProfile(Profile);
_profileRepoMock.Verify(repository => repository.SaveOrUpdate(profile), Times.AtLeastOnce());
Assert.AreEqual(true, verify);
}
}
Когда я пытаюсь это проверить, я получаю такую ошибку:
Ожидается вызов макета хотя бы один раз, но так и не был выполнен: repository => repository.SaveOrUpdate (.profile)
Настроенные настройки: x => x.SaveOrUpdate (.profile), Times.Never
Выполненные вызовы: IRepository`1.SaveOrUpdate (DynamicCms.Data.DataModels.Profile)
Вот метод CreateProfile в классе ProfileService:
public class ProfileService : IProfileService
{
private readonly IRepository<Profile> _profileRepo;
public ProfileService(IRepository<Profile> profileRepo)
{
_profileRepo = profileRepo;
}
public bool CreateProfile(ProfileViewModel profile)
{
Profile profileToCreate = new Profile
{
Domain = profile.Domain,
ProfileName = profile.Name
};
bool verify = _profileRepo.SaveOrUpdate(profileToCreate);
if (verify)
{
return true;
}
return false;
}
}
РЕДАКТИРОВАТЬ: я заменил объект профиля, передаваемый в
_profileRepoMock.Setup(x => x.SaveOrUpdate(profile)).Returns(true);
с участием
_profileRepoMock.Setup(x => x.SaveOrUpdate(It.IsAny<Profile>())).Returns(true);
Этот метод работает сейчас, но почему именно он не работал раньше, когда я передавал один и тот же объект в методы Verify и Setup.
Оглядываясь назад, можно сказать, что, поскольку этот метод настроен на возврат определенного значения, на самом деле не имеет значения, что в него передается, но было бы неплохо узнать.
ProfileService.CreateProfile
метод? - person nemesv   schedule 02.06.2013