我目前正在使用我的testproject以同样的方式测试我的所有域实体。因此,我创建了一个基类,它将由我的所有测试类继承,以确保它们共享相同的行为。
除了GetByPrimaryKey之外,我的所有方法都可以正常工作,GetByPrimaryKey在返回我的类型实例时返回null。
基类的实现:
[TestClass]
public abstract class RepositoryTestBase<E, C>
where E : EntityBase
where C : IDBContext
{
protected E MockedEntity;
protected IRepository<E, C> Repository { get { return _mockedRepository.Object; } }
private Mock<IRepository<E, C>> _mockedRepository;
[TestInitialize]
public void Init()
{
MockedEntity = System.Activator.CreateInstance<E>();
_mockedRepository = new Mock<IRepository<E, C>>();
_mockedRepository.Setup(f => f.Add(MockedEntity)).Callback(() => { MockedEntity.Id = 1; });
_mockedRepository.Setup(f => f.GetByPrimaryKey(MockedEntity.Id)).Returns(MockedEntity);
_mockedRepository.Setup(f => f.Update(MockedEntity)).Callback(() => { MockedEntity.AlteradoEm = DateTime.Now; });
_mockedRepository.Setup(f => f.Remove(MockedEntity)).Callback(() => { MockedEntity.Deleted = true; });
}
}
如何使Returns()方法返回一个对象而不是返回null?为什么它会返回null?提前谢谢。
答案 0 :(得分:2)
由于您只有一个MockedObject,因此您不必非常关心模拟存储库设置中的输入参数。
因此,您可以执行以下操作:
_mockedRepository.Setup(f => f.GetByPrimaryId(It.IsAny<int>()).Returns(MockedEntity);
您的实体的类型在哪里&#39; key(或其他&#34; GetByPrimaryId&#34;期待)
答案 1 :(得分:0)
为什么它会返回null?
Id
有可能改变。使用在设置时默认为MockedEntity.Id
的常量0
会导致您遇到的问题,因为如果您在已将模拟方法添加到存储库后调用模拟方法{{1不匹配,不会行使模拟行为。
如何使Returns()方法返回一个对象而不是返回null?
相反,在设置中使用Id
并将提供的Returns()
与实体的当前It.IsAny<int>()
进行比较,使Id
语句变得灵活,只返回实体Ids匹配。
Id