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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top