使用参数验证对控制器方法进行单元测试

Unit testing a controller method with parameter validation

我想为如下定义的控制器方法编写单元测试(实际的正则表达式要复杂得多,这里进行了简化)

  [HttpGet, Route(@"/abc/{X}/{Y}")] /*,  
        public async Task<IActionResult> GetData(
            [FromRoute, Required, RegularExpression(@"^[\w]{4,12}$")]  string X,
            [FromRoute, Required, RegularExpression(@"^[\w]{2,24}$")]  string Y
            )
        {
             ... 
        }

现在,如其他问题中所述,验证在单元测试中不起作用。但是,我希望有人可以阐明如何对使用如上所示的顶级参数的代码进行单元测试,因为到目前为止我发现的所有讨论都集中在模型验证上。

FWIW,我正在使用 Net 5。

我能够通过使用 Refit and IntegrationFixture as explained in this article on CodeProject.

将测试提升为集成测试来实现这一点

一般来说,它是这样的(只是一些片段以防 link 死亡):

  1. 创建接口:
     public interface IMyAPI
        {
            [Get("/abc/{X},{Y}")]
            Task<ApiResponse<string>> Get( string X, string Y);
        }
  1. 在单元测试中使用它:
     using (var fixture = new RefitFixture<Startup, IMyAPI>(RestService.For<IMyAPI>))
            {
                var refitClient = fixture.GetRefitClient();
                var response = await refitClient.Get(X, Y);
                ...
             }