c# nhibernate nunit resharper moq

c# - Moq: configuración inválida en un miembro no invalidable: x=> x.GetByTitle("asdf")



nhibernate nunit (1)

Para controlar el comportamiento de un objeto simulado (en Moq, al menos), debe simular una interfaz o asegurarse de que el comportamiento que está intentando controlar se marque como virtual. En tu comentario, lo entiendo para que la _mockArticleDao de instancias de _mockArticleDao se haga de la siguiente manera:

_mockArticleDao = new Mock<ArticleDAO>();

Si desea mantenerlo así, debe marcar el método GetArticle virtual :

public class ArticleDAO : GenericNHibernateDAO(IArticle, int>, IArticleDAO { public virtual IArticle GetByTitle(string title) { // ... } }

De lo contrario (y esto es lo que recomiendo), se burlan de la interfaz.

_mockArticleDao = new Mock<IArticleDAO>();

No estoy seguro de cómo puedo solucionar esto, tratando de hacer una prueba unitaria sobre el método "GetByTitle"

Aquí están mis definiciones:

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); }

prueba de unidad:

[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); }

Ejecutar la prueba me da el error:

System.ArgumentException: Invalid setup on a non-overridable member: x => x.GetByTitle("some title")

Actualizar

Mi [Setup] ve así:

[Setup] public void SetUp() { _mockDaoFactory = new Mock<IDaoFactory>(); _mockArticleDao = new Mock<ArticleDao>(); _articleManager = new ArticleManager(_mockDaoFactory.Object); }