簡體   English   中英

如何使用Mock測試我的控制器?

[英]How can I use Mock to test my controller?

我有一個控制器:

public class SelectController : Controller {
    private readonly IChartService _chartService;
    private readonly IProductService _productService;
    private readonly IStoreService _storeService;

    public SelectController ( IChartService chartService,
                              IProductService productService,
                              IStoreService storeService ) {
        _chartService = chartService;
        _productService = productService;
        _storeService = storeService;
    }

    [HttpGet]
    [Route( "stores" )]
    public Task<IEnumerable<IStore>> GetStoresInfo ( string encryptedUserId ) {
        return _storeService.GetStoresInfo( EncryptionProvider.Decrypt( encryptedUserId ) );
    }
}

我正在嘗試使用Moq測試GetStoresInfo 到目前為止,這就是我所擁有的:

[Fact]
public class Controller_Returns_List_Of_Stores()
{
    //Arrange
    var mockStoreService = new Mock<IStoreService>();
    var mockChartService = new Mock<IChartService>();
    var mockProductService = new Mock<IProductService>();



    var controller = new SelectController(mockChartService, mockProductService, mockStoreService);

    //Act
    //Assert
}

SelectController不會接受3個對象,我在路過由於暫時無法從轉換InServiceInService 我是否打算進行更多設置? 還是與返回類型為Task有關?

任何幫助,不勝感激。

在模擬對象上調用.Object以傳遞模擬對象。

 var controller = new SelectController(
     mockChartService.Object, 
     mockProductService.Object, 
     mockStoreService.Object
);

您還需要設置模擬對象的行為,以使它們在被調用時能夠按預期運行。

IEnumerable<IStore> fakeData = new List<IStore>();

mockStoreService
    .Setup(_ => _.GetStoresInfo(It.IsAny<string>()))
    .Returns(Task.FromResult<IEnumerable<IStore>>(fakeData));

參考Moq快速入門 ,以更好地了解如何使用模擬框架。

暫無
暫無

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

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