MVC moq с репозиторием, использующим лямбда-выражение - PullRequest
0 голосов
/ 14 июля 2011

У меня есть метод контроллера, который принимает метод хранилища, у которого в качестве параметра есть лямбда-выражение:

// GET: /Product/
    public ViewResult List(string category, int page = 1) {

        ProductsListViewModel productsListViewModel = new ProductsListViewModel {
            Products = _repository.GetByPage(q => q.Category == category || category == null, page, PageSize),
            PagingInfo = new PagingInfo {
                CurrentPage = page,
                ItemsPerPage = PageSize,
                TotalItems = _repository.Get(q=>q.Category==category || category==null).Count()
            },
            CurrentCategory = category
        };

        return View(productsListViewModel);
    }

В моем модульном тесте, когда контроллер вызывает метод репозитория, возвращаемый объект (переменная "result") всегда равен null, у вас есть какое-либо представление об этой ситуации?

public void Can_Paginate() {
        //Arrange
        //Create mock repository
        Mock<IProductRepository> mock = new Mock<IProductRepository>();
        mock.Setup(q => q.GetByPage(c=>c.Category=="C1",1,3)).Returns(new List<Product>
                                                {
                                                    new Product {Id = 1, Name = "P1", Category = "C1"},
                                                    new Product {Id = 2, Name = "P2", Category = "C1"},
                                                    new Product {Id = 3, Name = "P3", Category = "C1"}
                                                });
        mock.Setup(q => q.Get(c => c.Category == "C1")).Returns(new List<Product>
                                                {
                                                    new Product {Id = 1, Name = "P1", Category = "C1"},
                                                    new Product {Id = 2, Name = "P2", Category = "C1"},
                                                    new Product {Id = 3, Name = "P3", Category = "C1"}
                                                });
        //Create a controller and make page size 3 items
        ProductController controller = new ProductController(mock.Object);
        controller.PageSize = 3;

        //Action
        ProductsListViewModel result = (ProductsListViewModel) controller.List("C1", 1).Model;

        //Assert
        Assert.IsTrue(result.Products.Count()==3);
    }

Спасибо

1 Ответ

2 голосов
/ 14 июля 2011

Только что быстро взглянул на moq wiki , и он показал пример соответствия Func

в качестве параметра.Таким образом, чтобы соответствовать аргументу Func , вы должны написать что-то вроде этого:

mock.Setup(q => q.GetByPage(It.Is<string>(c=>c.Category=="C1"),1,3)).Returns...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...