【发布时间】:2010-12-30 03:57:15
【问题描述】:
我要测试的类是我的 ArticleManager 类,特别是 LoadArticle 方法:
public class ArticleManager : IArticleManager
{
private IArticle _article;
public ArticleManger(IDBFactory dbFactory)
{
_dbFactory = dbFactory;
}
public void LoadArticle(string title)
{
_article = _dbFactory.GetArticleDAO().GetByTitle(title);
}
}
我的 ArticleDAO 看起来像:
public class ArticleDAO : GenericNHibernateDAO<IArticle, int>, IArticleDAO
{
public virtual Article GetByTitle(string title)
{
return Session.CreateCriteria(typeof(Article))
.Add(Expression.Eq("Title", title))
.UniqueResult<Article>();
}
}
[SetUp]
public void SetUp()
{
_mockDbFactory = new Mock<IDBFactory>();
_mockArticleDao = new Mock<ArticleDAO>();
_mockDbFactory.Setup(x => x.GetArticleDAO()).Returns(_mockArticleDao.Object);
_articleManager = new ArticleManager(_mockDbFactory.Object);
}
[Test]
public void load_article_by_title()
{
var article1 = new Mock<IArticle>();
_mockArticleDao.Setup(x => x.GetByTitle(It.IsAny<string>())).Returns(article1.Object);
_articleManager.LoadArticle("some title");
Assert.IsNotNull(_articleManager.Article);
}
单元测试失败,_articleManager.Article 对象返回 NULL。
我做的一切都正确吗?
这是我的第一个单元测试之一,所以我可能遗漏了一些明显的东西?
我遇到的一个问题是,我想模拟 IArticleDao,但由于 ArticleDao 类也继承自抽象类,如果我只是模拟 IArticleDao,那么 GenericNHibernateDao 中的方法不可用?
【问题讨论】:
-
据我所知,安装程序代码根本无法编译,因为 ArticleManager 构造函数采用 IDBFactory 的实例,但您提供的是
Mock<IDBFactory>的实例。这让我觉得发布的代码还有其他问题。您是否不小心遗漏了什么? -
对不起,我把它改成了 _mockDbFactory.Object。你指的是什么?
标签: c# unit-testing nhibernate moq