Интеграционный тест Asp.Net Core Изменение параметров атрибута - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть метод конечной точки, который имеет собственный атрибут, такой как:

[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");

Большое спасибо заранее

1 Ответ

0 голосов
/ 22 ноября 2018

Это можно сделать.Для целочисленного теста, используя тестовый сервер, просто добавьте глобальный фильтр к вашему MVC, вам нужно реализовать IActionFilter.Затем в методе .OnActionExecuting вы можете получить доступ к определенному атрибуту метода, чтобы изменить его общедоступные свойства (например, значения, передаваемые в конструктор атрибута).Ваш фильтр методов будет вызван после глобального фильтра с новыми значениями свойств.

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 } 
...