这个问题类似于如何异步设置Thread.CurrentPrincipal。但是,在我的情况下,我正在尝试在单元测试中使其工作,并希望通过自定义SynchronizationContext解决此问题。
是否有一个类似于ASP.NET使用的SynchronizationContext,但可用于单元测试?(我的代码在ASP.NET中完美运行。)
特别是,我想要AspNetSynchronizationContext的一项功能,即允许主体从异步方法“冒泡”出来。
当在asp.net应用程序/上下文中调用SetCurrentPrincipalAsync方法时,Thread.CurrentPrincipal不会被调用方法覆盖。- 但是当运行测试时,它将失败。
是否有一个类似于ASP.NET使用的SynchronizationContext,但可用于单元测试?(我的代码在ASP.NET中完美运行。)
特别是,我想要AspNetSynchronizationContext的一项功能,即允许主体从异步方法“冒泡”出来。
当在asp.net应用程序/上下文中调用SetCurrentPrincipalAsync方法时,Thread.CurrentPrincipal不会被调用方法覆盖。- 但是当运行测试时,它将失败。
[Fact]
public async Task SetSynchronizationContext()
{
//SynchronizationContext.SetSynchronizationContext(new SomeCustomSynchronizationContext());
await SetCurrentPrincipalAsync();
Assert.Equal("Name", Thread.CurrentPrincipal.Identity.Name);
}
static async Task SetCurrentPrincipalAsync()
{
var principal = new GenericPrincipal(new GenericIdentity("Name"), new []{"Role"});
Thread.CurrentPrincipal = principal;
if (HttpContext.Current != null)
HttpContext.Current.User = principal;
await Task.Delay(TimeSpan.FromSeconds(1));
}