これを修正する方法がわからない、メソッド「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);
}
はい、インターフェイスを使用して[設定]でdaofactoryとmockarticleDaoをモックしました。DAOはクラスを使用して行われました。
—
mrblah 2009
@tomas質問をセットアップコードで更新しました。
—
mrblah 2009
私の答えでわかるように、インターフェイスをモックする(推奨)か、
—
Tomas Aschan 2009
GetByTitle
メソッドにマークを付ける必要がありますvirtual
。
また、テストの最初の行をセットアップルーチンに移動できるようにも見えます...?
—
Tomas Aschan 2009
_mockDaoFactory
して_mockArticleDao
どこかで?クラスまたはインターフェースのモックを作成しますか