使用xunit测试时,如何在控制器中通过注入的服务



我有。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);

相关内容

  • 没有找到相关文章

最新更新