Je ne sais pas comment résoudre ce problème, en essayant de faire un test unitaire sur la méthode "GetByTitle"
Voici mes définitions:
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 de l'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);
}
L'exécution du test me donne l'erreur:
System.ArgumentException: Invalid setup on a non-overridable member:
x => x.GetByTitle("some title")
Mettre à jour
Mon [Setup]
ressemble à:
[Setup]
public void SetUp()
{
_mockDaoFactory = new Mock<IDaoFactory>();
_mockArticleDao = new Mock<ArticleDao>();
_articleManager = new ArticleManager(_mockDaoFactory.Object);
}
_mockDaoFactory
et_mockArticleDao
quelque part? Vous moquez-vous de la classe ou de l'interfaceGetByTitle
méthodevirtual
.Réponses:
Afin de contrôler le comportement d'un objet fictif (au moins dans Moq), vous devez soit vous moquer d'une interface, soit vous assurer que le comportement que vous essayez de contrôler est marqué comme virtuel. Dans votre commentaire, je le comprends pour que l'instanciation de
_mockArticleDao
se fasse quelque chose comme ceci:Si vous souhaitez le conserver tel quel, vous devez marquer la
GetArticle
méthodevirtual
:Sinon (et c'est ce que je recommande), moquez-vous plutôt de l'interface.
la source