[英]how to pass injected service in controller when using xunit test
I have dot net core (v5) web api porject.我有 dot net core (v5) web api 项目。
I want to make a Xunit test
for testing my web api.我想做一个
Xunit test
来测试我的 web api。
I have a UsersController
for CRUD
.我有一个
CRUD
的UsersController
。 in my Constructor i have 4 input as shown below:在我的构造函数中,我有 4 个输入,如下所示:
public UsersController(AppDbContext _appDbContext, IMapper _mapper, IOptions<SieveOptions> sieveOptions, SeiveProcessorService sieveProcessorService) : base(_appDbContext, _mapper)
{
_sieveProcessorService = sieveProcessorService;
_sieveOptions = sieveOptions.Value;
}
SeiveProcessorService
its a Service
in my project. SeiveProcessorService
它是我项目中的一项Service
。
I can pass three input in my test unit but i can't pass last input.我可以在我的测试单元中传递三个输入,但我不能传递最后一个输入。
i dont know how to send to controller我不知道如何发送给控制器
my test code is :我的测试代码是:
[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);
}
}
}
I don't know how can send fourth input?我不知道如何发送第四个输入?
Create ISeiveProcessorService
intrerface and mock
it in your unit testing.创建
ISeiveProcessorService
接口并在您的单元测试中mock
它。
public interface ISeiveProcessorService
{
void A();
}
public class SeiveProcessorService : ISeiveProcessorService
{
// implement interface methods
public void A()
{
}
}
UPDATE更新
in order to use Moq
you need to install and import namespace.为了使用起
Moq
量,您需要安装和导入命名空间。 And in your test method:在你的测试方法中:
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.