Unable to create fake of request.Uri

151 Views Asked by At

I have a chunk of code that I want to test:

 public override async Task Invoke(IOwinContext context)
 {
 
   if (context.Request.Uri.AbsolutePath.ToLower().Equals("/data"))
   {
     ..other stuff
   }
    await this.Next.Invoke(context);
 }

Now I want to unit test this but getting an exception for AbsolutePath

System.InvalidOperationException : This operation is not supported for a relative URI. at System.Uri.get_AbsolutePath()

Here is my unit test:

   [Test]
   public void MiddleWare_Should_Not_Call_Process_Request_IF_Uri_Does_Not_Match()
   {
     var request = A.Fake<IOwinRequest>();
     A.CallTo(() => request.Uri).Returns(new Uri("http://dummyUrl.com/login"));
     var middleware = new MyMiddleware(_owinMiddleware);
     middleware.Invoke(this._owinContext).GetAwaiter().GetResult();

     Assert.IsNull(this._owinContext.Response);
  }

I am using Nuit and FakeItEast. Any idea how can I fix this?

1

There are 1 best solutions below

1
Code Name Jack On BEST ANSWER

You should be mocking IOwinContext.Request too. Otherwise it will not be able to resolve the request itself and therefore the mock request will never be used.

   [Test]
   public void MiddleWare_Should_Not_Call_Process_Request_IF_Uri_Does_Not_Match()
   {
     var request = A.Fake<IOwinRequest>();
     A.CallTo(() => this._owinContext.Request).Returns(request); 
     A.CallTo(() => request.Uri).Returns(new Uri("http://dummyUrl.com/login"));
     var middleware = new MyMiddleware(_owinMiddleware);
     middleware.Invoke(this._owinContext).GetAwaiter().GetResult();

     Assert.IsNull(this._owinContext.Response);
  }