无法伪造request.Uri,OWIN中间件单元测试报错求助
解决OWIN中间件单元测试中AbsolutePath抛出异常的问题
问题原因
你创建了Fake的IOwinRequest并设置了Uri,但没有将这个Fake请求关联到IOwinContext上。中间件实际访问的context.Request并不是你配置的Fake实例,导致Uri可能是默认的相对路径,调用AbsolutePath时触发异常。
修复步骤
修改单元测试代码,确保Fake的IOwinContext返回你配置好的FakeIOwinRequest:
[Test] public void MiddleWare_Should_Not_Call_Process_Request_IF_Uri_Does_Not_Match() { // 创建Fake的Owin上下文 var fakeContext = A.Fake<IOwinContext>(); // 创建Fake的请求并配置Uri var fakeRequest = A.Fake<IOwinRequest>(); A.CallTo(() => fakeRequest.Uri).Returns(new Uri("http://dummyUrl.com/login")); // 让上下文的Request属性返回我们的Fake请求 A.CallTo(() => fakeContext.Request).Returns(fakeRequest); var middleware = new MyMiddleware(_owinMiddleware); middleware.Invoke(fakeContext).GetAwaiter().GetResult(); // 注意:OWIN上下文的Response通常不会为null,建议根据实际逻辑调整断言 // 比如断言Response未被修改,或某个特定属性符合预期 // Assert.IsNull(fakeContext.Response); }
额外说明
- 确保FakeItEasy版本正确配置了所有依赖的Fake对象关联,避免未配置的属性返回默认值(比如相对Uri)。
- 若仍有问题,检查中间件中是否还有其他依赖
Request的属性未被Fake配置,导致触发异常。
内容的提问来源于stack exchange,提问作者Ask
相关产品推荐
相关产品推荐

