2
我一直在探索在單元測試中使用模擬對象,並且一直在嘗試用於.NET的Moq框架。我在嘗試測試從數據庫返回域對象的服務層方法時遇到了一些問題。在單元測試中使用Moq的問題
這裏是我的設置:
[SetUp]
public void DoSetupTasks()
{
mockDao = new Mock<IHibernateDao>();
_hibernateService = new HibernateService(mockDao.Object);
mockDomainObject = new Mock<DomainBase>();
dmBase = new DomainBase()
{
Id = 5
};
}
這裏是我有問題的單元測試。方法FindById()
根據給定的ID和類型返回一個DomainBase對象。
[Test]
public void TestFindById()
{
mockDomainObject.Setup(dmb => dmb.Id.Equals(It.IsAny<long>())).Returns(true);
mockDao.Setup(dao => dao.FindById(
It.IsAny<long>(),
It.IsAny<Type>()
)).Returns(mockDomainObject.Object);
_hibernateService.FindById(dmb.Id, typeof(DomainBase));
mockDomainObject.VerifySet(dmb => dmb.Id = dmBase.Id);
}
當我運行單元測試,它拋出以下異常:
Exception: Invalid setup on a non-virtual (overridable in VB) member: dmb => dmb.Id.Equals(It.IsAny<Int64>())
我得承認,我與框架相當陌生。我一直在試着去關注一些教程,但是我一直無法弄清楚它。
謝謝!我會給出一個答案,並在明天回來報告,但僅僅基於查看您的代碼,它現在變得更加合理。 – 2010-12-06 22:35:38