我正在尝试使用 Ninject Moq 框架创建一个简单的单元测试,但由于某种原因,我无法让 Setup 方法正常工作。据我了解,下面的 Setup 方法应该将存储库注入到 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)
这是 ProfileService 类中的 CreateProfile 方法:
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;
}
}
编辑:我替换了传入的 Profile 对象
_profileRepoMock.Setup(x => x.SaveOrUpdate(profile)).Returns(true);
和
_profileRepoMock.Setup(x => x.SaveOrUpdate(It.IsAny<Profile>())).Returns(true);
这个方法现在可以工作,但是为什么当我将同一个对象传递给验证和设置方法时它不能工作。
回顾一下,由于这个方法被设置为返回一个特定的值,所以传递给它的内容并不重要,但很高兴知道。