【发布时间】:2010-12-30 00:57:39
【问题描述】:
不确定如何解决此问题,正在尝试对“GetByTitle”方法进行单元测试
这是我的定义:
public class ArticleDAO : GenericNHibernateDAO(IArticle, int>, IArticleDAO
{
public IArticle GetByTitle(string title)
{
IQuery query = Session.CreateQuery("...")
return query.UniqueResult<IArticle>();
}
}
public interface IArticleDAO
{
IArticle GetByTitle(string title);
}
单元测试:
[Test]
public void can_load_by_title()
{
_mockDaoFactory.Setup(x => x.GetArticleDao())
.Returns(_mockArticleDao.Object);
_mockArticleDao.Setup(x => x.GetByTitle("some title"))
.Returns(article1.Object);
_articleManager.LoadArticle("some title");
Assert.IsNotNull(_articleManager.Article);
}
运行测试给了我错误:
System.ArgumentException: Invalid setup on a non-overridable member:
x => x.GetByTitle("some title")
更新
我的[Setup] 看起来像:
[Setup]
public void SetUp()
{
_mockDaoFactory = new Mock<IDaoFactory>();
_mockArticleDao = new Mock<ArticleDao>();
_articleManager = new ArticleManager(_mockDaoFactory.Object);
}
【问题讨论】:
-
你在某处实例化
_mockDaoFactory和_mockArticleDao吗?你是模拟类还是界面 -
是的,我使用Interface在[Setup]中模拟了daofactory和mockarticleDao。 DAO 是使用类完成的。
-
@tomas 我用设置代码更新了我的问题。
-
正如您在我的回答中看到的那样,您需要模拟界面(这是我推荐的)或标记
GetByTitle方法virtual。 -
您的测试中的第一行似乎也可以移至设置例程...?
标签: c# nhibernate nunit resharper moq