【发布时间】:2015-12-24 04:05:39
【问题描述】:
这个问题类似于Set Thread.CurrentPrincipal Asynchronously?。然而,就我而言,我试图让它在 unit-tests 中工作,并希望通过自定义 SynchronizationContext 来解决这个问题。
是否有一个 SynchronizationContext 的行为类似于 ASP.NET 使用的,但它可以被单元测试使用? (我的代码在 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));
}
【问题讨论】:
标签: c# unit-testing asynchronous async-await