Модульное тестирование ASP.NET MVC с шаблоном репозитория - PullRequest
2 голосов
/ 30 марта 2011

Я пытаюсь намочить ноги с помощью asp.net mvc3 и модульного тестирования.

Я создал модель, которая использует шаблон хранилища. Вот интерфейс:

public interface IExtensionRepository
{
    IList<Extensions> ListAll();
}

Вот хранилище:

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

}

Вот контроллер:

public class ExtensionController : Controller
{

    private IExtensionRepository _repository;

    public ExtensionController()
        : this(new ExtensionRepository())
    {

    }

    public ExtensionController(IExtensionRepository repository)
    {
        _repository = repository;
    }
 }

Кажется, что страницы работают так, как задумано. Однако с моим модульным тестом дела идут плохо. Он находится в другом проекте в том же решении. Я использую Moq и NUnit. Вот мой тест:

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

Я получаю следующие ошибки для строки, начинающейся с «var controller ...»:

Лучший перегруженный метод соответствует 'MvcApplication1.Controllers.ExtensionController.ExtensionController (MvcApplication1.Models.IExtensionRepository)' имеет недопустимые аргументы

И

Аргумент 1: невозможно преобразовать из 'Moq.Mock' в 'MvcApplication1.Models.IExtensionRepository'

Я знаю, что где-то пропустил лодку, но понятия не имею, где ... какие-нибудь идеи?

1 Ответ

8 голосов
/ 30 марта 2011

Измените это:

var controller = new ExtensionController(repos); 

на это:

var controller = new ExtensionController(repos.Object);

PS .: Я знаю, что это отстой, но именно так Moq был разработан.

...