不确定如何解决此问题,尝试对方法“ 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);
}
是的,我使用界面在[Setup]中嘲笑了daofactory和mockarticleDao。DAO是使用该类完成的。
—
mrblah
@tomas我用设置代码更新了我的问题。
—
mrblah
正如您在我的答案中看到的那样,您需要模拟接口(这是我推荐的接口)或标记
—
Tomas Aschan,2009年
GetByTitle
方法virtual
。
看起来好像测试中的第一行可以移到设置例程中...?
—
Tomas Aschan,2009年
_mockDaoFactory
并在_mockArticleDao
某处吗?您是否在模拟类或接口