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