2016-01-26 5 views
0

У меня есть контроллер в ASP.NET MVC 6.Как протестировать контроллер?

public class VendorManagementController : Controller 
    { 
     private readonly IVendorRespository _vendorRespository; 

     public VendorManagementController(IVendorRespository vendorRespository) 
     { 
      _vendorRespository = vendorRespository; 
     } 

     [Microsoft.AspNet.Mvc.HttpGet] 
     public dynamic GetVendorById(int pkey) 
     { 
      Vendor vendor = _vendorRespository.GetVendor(pkey); 
      return vendor; 
     } 

     // GET 
     // USing JqGrid 
     [Microsoft.AspNet.Mvc.HttpGet] 
     public dynamic GetVendors(string sidx, string sortOrder, int page, int rows, int pkey) 
     { 
      var vendors = _vendorRespository.GetAllVendors().AsQueryable(); 
      var pageIndex = Convert.ToInt32(page) - 1; 
      var pageSize = rows; 
      var totalRecords = vendors.Count(); 
      var totalPages = (int)Math.Ceiling((float)totalRecords/(float)pageSize); 
      return something 
     } 

     // POST 
     [System.Web.Http.HttpPost] 
     public string PostVendor(Vendor item) 
     { 
      _vendorRespository.AddVendor(item); 
     } 

link представляет собой пример для тестирования контроллера, но он использует HttpRequestMessage. Это не соответствует моему делу.

Так что, если я хочу протестировать возвращение поставщиков, как? Скажем, у меня есть метод:

[Fact] 
    public void GetAllVendors_ShouldReturnAllVendors() 
    { 
     var testVendors = GetTestVendors(); 
     var vendorRespository = new VendorRespository(); 
     var controller = new VendorManagementController(vendorRespository); 
    } 

Дело в том,

var vendors = _vendorRespository.GetAllVendors().AsQueryable(); 

из Databse, как макет это с моими поддельными продавцами?

EDIT:

Метод возвращает динамический тип, я не могу получить граф списка. image

+0

'controller.GetVendors()'? Мне немного непонятно, что именно вы спрашиваете. – CodeCaster

+0

@CodeCaster, no.Этот метод требует много параметров. Нужно их издеваться? –

+0

** Что вы хотите проверить? Если вы хотите проверить, что возвращает этот метод действия, вы должны его вызвать. Вы издеваетесь над зависимостями, такими как репозиторий, поэтому вы можете убедиться, что метод действия вызывает соответствующий метод в репозитории. – CodeCaster

ответ

1

Установить мерцающий каркас, такой как Moq от nuget - https://www.nuget.org/packages/Moq/.

using Moq; 

[Fact] 
public void GetAllVendors_ShouldReturnAllVendors() 
{ 
    var testVendors = GetTestVendors(); 
    var vendorRespository = new Mock<IVendorRepository>(); 
    vendorRepository.Setup(m => m.GetAllVendors()).Returns(new List<Vendor> { new Vendor() }); // Guessing a bit on return types 
    var controller = new VendorManagementController(vendorRespository.Object); 

    var result = controller.GetVendors(...) 

    // Assert you get 1 Vendor back, not sure what you're planning to return by "something". :-) 
} 

Другие рамки доступны, NSubsititute, FakeItEasy

+0

Я попробовал, вещь - метод return 'dynamic', я не могу получить' Count' –

+0

Если вы дадите мне более полный пример, я попробую и вытащу его для вас. Я не мог понять, что вы подразумеваете под «чем-то» :-) – NikolaiDante

+0

Я имею в виду, что intellisense не выдает свойство Count. Я уточню вопрос. Надеюсь, удалите нижний план. –

Смежные вопросы