集成测试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 }
我有一个具有自定义属性的端点方法,例如:
[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 }