小编And*_*aal的帖子

在AspNetCore上进行单元测试控制器模型验证

在ASPNET核心项目中,我试图创建一些单元测试,以验证我的数据验证逻辑是否正常工作.

我的控制器非常简单:

[HttpPost]
[Route("Track")]
public void Track([FromBody] DataItem item)
{
    if (!ModelState.IsValid) throw new ArgumentException("Bad request");

    _dataItemSaver.SaveData(item);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用一个测试基类,将_myController对象设置为测试中的控制器.

    public ControllerTestBase()
    {
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"buildversion.json", optional: true)
            .AddEnvironmentVariables();
        _config = builder.Build();

        var services = new ServiceCollection()
            .AddEntityFrameworkInMemoryDatabase()
            .AddDbContext<MyDbContext>(options =>
            {
                options.UseInMemoryDatabase();
            })
            .AddScoped<IDataItemSaver, DataItemSQLStorageService>()
            .AddScoped<MyController>()
            .Configure<MyConfig>(_config.GetSection(nameof(MyConfig)));

        services
            .AddMvc(mvcOptions =>
                {
                    mvcOptions.Filters.AddService(typeof(GlobalExceptionFilter), 0);
                });

        _additionalDISetupActions?.Invoke(services);

        _serviceProvider = services.BuildServiceProvider();

        _myController = _serviceProvider.GetService<MyController>();
    }
Run Code Online (Sandbox Code Playgroud)

测试再次非常简单:

    [TestMethod]
    public void Prop3Required()
    {
        // Arrange
        var …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing asp.net-core asp.net-core-webapi

5
推荐指数
2
解决办法
4517
查看次数