我想创建一个简单的单元测试,使用Ninject Moq框架,出于某种原因,我无法使安装程序方法正常工作。根据我的理解,下面的Setup方法应该使用预定义的结果true将资源库注入到Service类中。Moq单元测试设置不工作
[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.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;
}
}
编辑:我取代了Profile对象被传递到
_profileRepoMock.Setup(x => x.SaveOrUpdate(profile)).Returns(true);
与
_profileRepoMock.Setup(x => x.SaveOrUpdate(It.IsAny<Profile>())).Returns(true);
此方法效果现在,但为什么当我通过同一个对象时它不能工作并入验证和设置方法。
回过头来看,由于此方法设置为返回特定值,因此传递给它的内容并不重要,但知道它会很高兴。
你可以发布修改你的' ProfileService.CreateProfile'方法? – nemesv
所有设置,我刚刚添加了该方法。 –