Tidak yakin bagaimana saya bisa memperbaikinya, mencoba melakukan tes unit pada metode "GetByTitle"
Inilah definisi saya:
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);
}
tes unit:
[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);
}
Menjalankan tes memberi saya kesalahan:
System.ArgumentException: Invalid setup on a non-overridable member:
x => x.GetByTitle("some title")
Memperbarui
Saya [Setup]
terlihat seperti:
[Setup]
public void SetUp()
{
_mockDaoFactory = new Mock<IDaoFactory>();
_mockArticleDao = new Mock<ArticleDao>();
_articleManager = new ArticleManager(_mockDaoFactory.Object);
}
_mockDaoFactory
dan di_mockArticleDao
suatu tempat? Apakah Anda mengejek kelas atau antarmukaGetByTitle
metodevirtual
.Jawaban:
Untuk mengontrol perilaku objek tiruan (setidaknya dalam Moq), Anda perlu meniru antarmuka, atau memastikan bahwa perilaku yang Anda coba kontrol ditandai virtual. Dalam komentar Anda, saya memahaminya sehingga pembuatan instance
_mockArticleDao
dilakukan seperti ini:Jika Anda ingin menyimpannya seperti itu, Anda perlu menandai
GetArticle
metodevirtual
:Jika tidak (dan inilah yang saya rekomendasikan), tirulah antarmuka sebagai gantinya.
sumber