我正在使用Moq并尝试模拟实现IGenericRepository接口的IDummyRepository,并且需要验证对IGenericRepository的Add方法的调用。但是下面的示例代码我得到了一个MockException。
如果我将ServiceDummy中的IGenericRepository替换为IDummyRepository,则测试有效,但不是我需要的方式。
这如何运作?
[TestClass]
public class DummyServiceSpec
{
protected DummyService service;
protected DummyModel model;
[TestClass]
public class Work : DummyServiceSpec
{
[TestMethod]
public void ExpectToWork()
{
var repositoryMock = new Mock<IDummyRepository>();
var serviceDummy = new ServiceDummy(repositoryMock.Object);
var entity = new Dummy { DummyString = "DummyString" };
serviceDummy.Add(entity);
repositoryMock.Verify(r => r.Add(It.IsAny<Dummy>()), Times.AtLeastOnce());
}
}
}
public class ServiceDummy
{
protected IGenericRepository<Guid, Dummy> dummyRepository;
public ServiceDummy(IDummyRepository dummyRepository)
{
this.dummyRepository = dummyRepository;
}
public virtual void Add(Dummy entity)
{
this.dummyRepository.Add(entity);
}
}
答案 0 :(得分:1)
尝试将存储库期望代码移动到存储库的Moq设置中。由于Add()方法是一个void,因此没有结果可以检查,但你可以使它可以验证它是否实际被调用。
[TestMethod]
public void ExpectToWork()
{
var repositoryMock = new Mock<IDummyRepository>();
var serviceDummy = new ServiceDummy(repositoryMock.Object);
var entity = new Dummy { DummyString = "DummyString" };
repositoryMock.Setup(i => i.Add(It.IsAny<Dummy>())).Verifiable();
serviceDummy.Add(entity);
repositoryMock.Verify();
}
答案 1 :(得分:0)
抱歉,我刚发现问题,这是我的GenericRepository代码中的一个错误。