Monday, 16 December 2019

Unit test cases for HTTP Requests


Hi Everone,

In recent past times observed external real-time integration unit tests were failing due to some reasons. Like client secret was changed for the token service, external server was down etc., Due to these issues our DevOps build pipeline got effected and VS test task was failing. To overcome these issues we need to fake our HTTP web requests also in unit test code. 
We followed below steps to fake HTTP Requests 
  1. Install HttpWebRequestWrapper from NuGet Packages
  2. Implement below code in your unit test file
var fakeResponseBody = Helper.SampleTokenResponse;
var fakeAzureKeyVaultResponse = "{\"value\":\"secretkey\",\"id\":\"https://azure.vault.azure.net/secrets/"}";
var fakeECSResponse = Helper.SoapSampleResponse;
using (new HttpWebRequestWrapperSession(
                new HttpWebRequestWrapperInterceptorCreator(req =>
               {
                   switch (req.HttpWebRequest.Host)
            {
                       case "login.microsoftonline.com":
                       case "login.windows.net":
                           return req.HttpWebResponseCreator.Create(fakeResponseBody);
                       case "azure.vault.azure.net":
                           return req.HttpWebResponseCreator.Create(fakeAzureKeyVaultResponse);
                       case "devapi.testserver.com":
                           return req.HttpWebResponseCreator.Create(fakeECSResponse);
                       default:
                           return req.HttpWebResponseCreator.Create(fakeECSResponse);
                   }
               })))
            {
                var result = context.ExecuteCodeActivity<GetSMARTActivities>(inputs, null);
                Assert.IsNotNull(result["SMARTActivities"]);
       }
That’s it. Note the above code is written using FakeXrm Easy library for Dynamics CRM custom workflow activity, you need to change it as per your requirements.
Let me know if you have any questions. Thanks!


No comments:

Post a Comment