ASP.NET MVC Unit Test avec motif de référentiel
-
14-11-2019 - |
Question
J'essaie de me mouiller les pieds avec ASP.NET MVC3 et les tests unitaires.
J'ai créé un modèle qui utilise le modèle de référentiel. Voici l'interface:
public interface IExtensionRepository
{
IList<Extensions> ListAll();
}
Voici le référentiel:
public class ExtensionRepository : IExtensionRepository
{
private ExtensionsLSDataContext _dataContext;
public ExtensionRepository()
{
_dataContext = new ExtensionsLSDataContext();
}
public IList<Extensions> ListAll()
{
var extensions = from ext in _dataContext.Extensions
select ext;
return extensions.ToList();
}
}
Voici le contrôleur:
public class ExtensionController : Controller
{
private IExtensionRepository _repository;
public ExtensionController()
: this(new ExtensionRepository())
{
}
public ExtensionController(IExtensionRepository repository)
{
_repository = repository;
}
}
Les pages semblent fonctionner comme conçus. Les choses s'égarent cependant avec mon test unitaire. Il réside dans un autre projet dans la même solution. J'utilise MOQ et NUnit. Voici mon test:
[Test]
public void Test_Extension_Index_Views()
{
Mock<Extensions> extension = new Mock<Extensions>();
List<Extensions> extList = new List<Extensions>();
extension.Object.Extension = "5307";
extension.Object.Extension_ID = 1;
extension.Object.ExtensionGroup_ID = 1;
extList.Add(extension.Object);
Mock<IExtensionRepository> repos = new Mock<IExtensionRepository>();
repos.Setup(er => er.ListAll()).Returns(extList);
var controller = new ExtensionController(repos);
var result = controller.Index() as ViewResult;
Assert.AreEqual("Index", result.ViewName);
}
J'obtiens les erreurs suivantes pour la ligne qui commence "Var Controller ...":
La meilleure correspondance de méthode surchargée pour 'Mvcapplication1.Controllers.ExtensionController.ExtensionController (MVCApplication1.Models.iextensionRepository)' a des arguments non valides
Et:
Argument 1: Impossible de se convertir de 'MOQ.MOCK' en 'MVCAPPLICATION1.Models.iextensionRepository'
Je sais que j'ai raté le bateau quelque part, mais je n'ai aucune idée de l'endroit où ... des idées?
La solution
Change ça:
var controller = new ExtensionController(repos);
pour ça:
var controller = new ExtensionController(repos.Object);
PS.: Je sais que ça craint, mais c'est ainsi que le MOQ a été conçu.