集成测试Asp.Net核心属性参数修改

Integration test Asp.Net Core attribute parameter modification

我有一个具有自定义属性的端点方法,例如:

[Route ("/version")]
[CacheFilter (hours: 12)]
public async Task<ActionResult<string>> Version ()
{ ... }

我的缓存过滤器在其构造函数中设置了指定的缓存时间:

public CacheFilterAttribute (int days = 0, int hours = 0, int minutes = 0, int seconds = 0) : base (typeof (CacheFilter))
{
    this.days = days;
    this.hours = hours;
    this.minutes ...
}

我想知道当我测试该端点时是否有可能将该时间更改为(例如)10 秒。

我在我的单元测试中这样调用端点方法:

await RADBServer.Client.GetAsync ("/version");

非常感谢

可以做到。对于集成测试,使用测试服务器只需向您的 MVC 添加一个全局过滤器,您需要实现 IActionFilter。然后在 the.OnActionExecuting 方法上,您可以访问特定的方法属性以更改其 public 属性(就像属性构造函数上传递的值一样)。您的方法过滤器将在具有新属性值的全局过滤器之后调用。

ConfigureServices(IServiceCollection services) { services.AddMvc(options => { options.Filters.Add(typefof(TestFilter))...

{ public class TestFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { // obtain the method attributes and change values }