Não sei como posso corrigir isso, tentando fazer um teste de unidade no método "GetByTitle"
Aqui estão minhas definições:
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);
}
teste de unidade:
[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);
}
Executar o teste me dá o erro:
System.ArgumentException: Invalid setup on a non-overridable member:
x => x.GetByTitle("some title")
Atualizar
Minha [Setup]
aparência é:
[Setup]
public void SetUp()
{
_mockDaoFactory = new Mock<IDaoFactory>();
_mockArticleDao = new Mock<ArticleDao>();
_articleManager = new ArticleManager(_mockDaoFactory.Object);
}
_mockDaoFactory
e em_mockArticleDao
algum lugar? Você zomba da classe ou da interfaceGetByTitle
métodovirtual
.Respostas:
Para controlar o comportamento de um objeto fictício (no Moq, pelo menos), você precisa simular uma interface ou certificar-se de que o comportamento que está tentando controlar está marcado como virtual. Em seu comentário, entendo que a instanciação de
_mockArticleDao
seja feita da seguinte forma:Se quiser mantê-lo assim, você precisa marcar o
GetArticle
métodovirtual
:Caso contrário (e isso é o que eu recomendo), simule a interface.
fonte