簡體   English   中英

如何對控制器進行單元測試?

[英]How to unit test the controller?

我在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);
        }

鏈接提供了一個測試控制器的示例,但它使用HttpRequestMessage 這不適合我的情況。

那么,如果我想測試退貨供應商,該怎么辦? 說我有方法:

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

事情是

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

從數據庫中,如何與我的假冒供應商一起模擬它?

編輯:

該方法返回動態類型,我無法獲取列表的Count。 圖片

從nuget安裝模擬框架,例如Moq- 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM