[英]how to pass injected service in controller when using xunit test
我有 dot net core (v5) web api 項目。
我想做一個Xunit test
來測試我的 web api。
我有一個CRUD
的UsersController
。 在我的構造函數中,我有 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.