適切な実行のためにcontext.Authentication.User.Identity.Nameを解決する必要があるミドルウェア メソッドがあります。ただし、単体テストを作成する場合、サインインが発生していないため、これらのプロパティは明らかに null です。別のミドルウェアの他の場所で処理する必要があるため (私が開発しているコンポーネントの再利用/柔軟性を促進するため)、このミドルウェアに関連する Oauth やその他の認証は使用していません (明らかな名前のプロパティを超えて)。テストを実行できるように、この値をモック/偽造する方法はありますか? サインオンを偽造するために考えられるすべてのことを試しましたが、この時点で立ち往生しています。明確にするために、ミドルウェアには webapi 呼び出しなどではなく値が必要です。
//Arrange
var resolver = A.Fake<IDependencyResolver>();
A.CallTo(() => resolver.GetService(typeof(ISomeService))).Returns(new TestService());
using (var server = TestServer.Create(app =>
{
app.UseMyMiddleware(new MyMiddlewareOptions()
{
DependencyResolver = resolver
});
app.Run(async ctx =>
{
await ctx.Response.WriteAsync(ctx.Request.Path.Value);
});
}))
{
//Act
var response = await server.CreateRequest("/").GetAsync();
//Assert
A.CallTo(() => resolver.GetService(typeof(ISomeService)))
.MustHaveHappened(Repeated.Exactly.Once);
Assert.AreEqual(response.StatusCode, HttpStatusCode.OK);
//Etc.
}