簡體   English   中英

使用 xunit 測試時如何在控制器中傳遞注入的服務

[英]how to pass injected service in controller when using xunit test

我有 dot net core (v5) web api 項目。

我想做一個Xunit test來測試我的 web api。

我有一個CRUDUsersController 在我的構造函數中,我有 4 個輸入,如下所示:

public UsersController(AppDbContext _appDbContext, IMapper _mapper, IOptions<SieveOptions> sieveOptions, SeiveProcessorService sieveProcessorService) : base(_appDbContext, _mapper)
{
      _sieveProcessorService = sieveProcessorService;
      _sieveOptions = sieveOptions.Value;
}

SeiveProcessorService它是我項目中的一項Service

我可以在我的測試單元中傳遞三個輸入,但我不能傳遞最后一個輸入。

我不知道如何發送給控制器

我的測試代碼是:

        [Fact]
        public void Test_GetList()
        {
            using (var context = new AppDbContext(ContextOptions))
            {

                //auto mapper configuration
                var mockMapper = new MapperConfiguration(cfg =>
                {
                    cfg.AddProfile(new MappingProfile(null));
                });
                var mapper = mockMapper.CreateMapper();

                //
                SieveOptions sieveOptions = new SieveOptions() { 
                    CaseSensitive = false,
                    DefaultPageSize = 50,
                    MaxPageSize = 500,
                    ThrowExceptions = true,
                };
                IOptions<SieveOptions> options = Options.Create(sieveOptions);

                // Arrange
                var controller = new UsersController(context, mapper, options,????);

                // Act
                var result = controller.GetList(null);

                // Assert
                var viewResult = Assert.IsType<IResult>(result);
                Assert.Null(viewResult);
            }
        }
    }

我不知道如何發送第四個輸入?

創建ISeiveProcessorService接口並在您的單元測試中mock它。

public interface ISeiveProcessorService
{
    void A();
}

public class SeiveProcessorService : ISeiveProcessorService
{
    // implement interface methods
    public void A()
    {
    }
}

更新

為了使用起Moq量,您需要安裝和導入命名空間。 在你的測試方法中:

Mock<ISeiveProcessorService> _mockSeiveProcessorService new Mock<ISeiveProcessorService>();
  
// set up moq  
_mockSeiveProcessorService.Setup(e => e.A()).Returns("Something");
                      
var controller = new UsersController(context, mapper, options,_mockSeiveProcessorService.Object);

暫無
暫無

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

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