Member 12749751 Ответов: 0

Насмешка всегда возвращает нулевое значение


Я написал модульный тест для метода ,так что все работает правильно, но есть только одна проблема с одним фиктивным объектом, этот объект всегда возвращает нулевое значение

Высмеивание сделать маркерный метод всегда возвращает значение null

Что я уже пробовал:

это модульный тест который я написал в этом все работает правильно кроме метода GetToken после издевательства этот метод всегда возвращает нулевое значение

public void UserRegistrationUnitTest()
      {
          RegistrationDTO inputParameters = new RegistrationDTO()
          {
              CountryCode="IN",
              Email="abc.abc@abc.com",
              FirstName="Abc",
              LastName="Abc",
              IsChild=0,
              Password="abc@12345",
              ReuseEmailAddress=0,
              TermsofUseAgreed=Confirm.Yes,
              UserName="abc123"
          };



          CountryList expectedOutputCountryData = new CountryList()
          {
             en=new List<En>()
             {
                 new En { name="AF",value="Afghanistan"},
                 new En { name="AX",value="Åland Islands"},
                 new En { name="AL",value="Albania"},
                 new En { name="DZ",value="Algeria"},
                 new En { name="IN",value="India"}
             }
          };
          RegistrationSuccessDTO DTOOutput = new RegistrationSuccessDTO() { ApprovalNeeded =false, Communication = "" };
          HttpResponseMessage expectedOutputUserReg = new HttpResponseMessage()
          {
              StatusCode = HttpStatusCode.OK,
              Content = new StringContent(JsonConvert.SerializeObject(DTOOutput))
          };

          LoginAuthDTO objInput = new LoginAuthDTO() { Username = inputParameters.UserName, Password = inputParameters.Password };
          TokenDTO objOuptput = new TokenDTO()
          {
              AccessToken = CommonUtility.AccessToken
          };
          HttpResponseMessage fout = new HttpResponseMessage()
          {
              StatusCode = HttpStatusCode.OK,
              Content =new StringContent(JsonConvert.SerializeObject(objOuptput))
          };
          //setting the mock for countrylist
          string serilizeCountrylst = JsonConvert.SerializeObject(expectedOutputCountryData);
          objMockIJsonReadDeserializeUtility.Setup(x => x.ReadJsonandDeserialize<CountryList>("Data/Countries.json")).Returns(expectedOutputCountryData);

          //setting the mock for UserRegistration
          objMockIRegistrationMEEService.Setup(x => x.UserRegistration(inputParameters)).Returns(Task.FromResult(expectedOutputUserReg));

          //setting the mock for GetTokenMethod
          objMockITokenApplicationService.Setup(x => x.GetToken(objInput)).Returns(Task.FromResult(fout));
          //call the actual method
          HttpResponseMessage finalOutput=objRegistrationService.UserRegistration(inputParameters).Result;

          string finalcontent = finalOutput.Content.ReadAsStringAsync().Result;

          CountryList contriesOutPut = objMockIJsonReadDeserializeUtility.Object.ReadJsonandDeserialize<CountryList>("Data/Countries.json");
          RegistrationSuccessDTO registrationOutput = JsonConvert.DeserializeObject<RegistrationSuccessDTO>(((StringContent)objMockIRegistrationMEEService.Object.UserRegistration(inputParameters).Result.Content).ReadAsStringAsync().Result);
          Assert.NotNull(registrationOutput);
          Assert.NotNull(contriesOutPut);
          Assert.NotNull(finalcontent);
      }



Актулальный Метод

public async Task<HttpResponseMessage> UserRegistration(RegistrationDTO registrationDTO)
       {
           CountryList lstCountryList = _ijsonReadDeserializeUtility.ReadJsonandDeserialize<CountryList>("Data/Countries.json");

           var checkcountry = lstCountryList.en.Any(x=>x.name == registrationDTO.CountryCode);

           if (checkcountry)
           {
               if (Regex.IsMatch(registrationDTO.Email, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase))
               {
                   if (registrationDTO.TermsofUseAgreed == Confirm.Yes)
                   {
                       var response = await _registrationMEEService.UserRegistration(registrationDTO);
                       string strContentString = await response.Content.ReadAsStringAsync();

                       if (response.StatusCode == System.Net.HttpStatusCode.BadRequest)
                       {
                           return response;
                       }
                       else if (response.StatusCode == System.Net.HttpStatusCode.OK)
                       {
                           RegistrationSuccessDTO responseobject = JsonConvert.DeserializeObject<RegistrationSuccessDTO>(strContentString);

                           if (!responseobject.ApprovalNeeded)
                           {
                               LoginAuthDTO authParams = new LoginAuthDTO() { Username = registrationDTO.UserName, Password = registrationDTO.Password };

                               var tokenResponse = await _tokenApplicationService.GetToken(authParams);

                               if (tokenResponse != null && tokenResponse.IsSuccessStatusCode)
                               {
                                   string contentString = await tokenResponse.Content.ReadAsStringAsync();

                                   TokenDTO tokenDTO = JsonConvert.DeserializeObject<TokenDTO>(contentString);

                                   List<object> lstTokenRegistration = new List<object>();
                                   lstTokenRegistration.Add(tokenDTO);
                                   lstTokenRegistration.Add(responseobject);

                                   return new HttpResponseMessage()
                                   {
                                       StatusCode = HttpStatusCode.OK,
                                       Content = new StringContent(JsonConvert.SerializeObject(lstTokenRegistration),
                                                      Encoding.UTF8, "application/json")
                                   };
                               }
                               else
                               {
                                   return new HttpResponseMessage()
                                   {
                                       StatusCode = HttpStatusCode.Unauthorized,
                                       Content = new StringContent(JsonConvert.SerializeObject(new MEEError() { Error = "UnAuthorised User", ErrorDescription = "User UnAuthorised" }),
                                              Encoding.UTF8, "application/json")
                                   };
                               }

                           }
                           else
                           {
                               return new HttpResponseMessage()
                               {
                                   StatusCode = HttpStatusCode.OK,
                                   Content = new StringContent(JsonConvert.SerializeObject(responseobject),
                                                  Encoding.UTF8, "application/json")
                               };
                           }

                       }
                       else
                       {
                           return response;
                       }
                   }
                   else
                   {
                       return new HttpResponseMessage()
                       {
                           StatusCode = HttpStatusCode.BadRequest,
                           Content = new StringContent(JsonConvert.SerializeObject(new MEEError() { Error = "AgreedTerms&ConditionError", ErrorDescription = "Please check Terms and Condition" }),
                                          Encoding.UTF8, "application/json")
                       };
                   }
               }
               else
               {
                   return new HttpResponseMessage()
                   {
                       StatusCode = HttpStatusCode.BadRequest,
                       Content = new StringContent(JsonConvert.SerializeObject(new MEEError() { Error = "InValidMailFormat", ErrorDescription = "Enter Valid Email" }),
                                          Encoding.UTF8, "application/json")
                   };
               }
           }
           else
           {
               return new HttpResponseMessage()
               {
                   StatusCode =HttpStatusCode.BadRequest,
                   Content = new StringContent(JsonConvert.SerializeObject(new MEEError() { Error = "InvalidCountryCode", ErrorDescription ="Enter Valid Country Code"  }),
                                          Encoding.UTF8, "application/json")
               };
           }

       }

Richard MacCutchan

Пожалуйста, не просто сбрасывайте сюда кучу неформатированного кода и не ждите, что кто-то (кто никогда не видел его раньше) проанализирует и отладит его для вас. Просто покажите отрывок кода, где происходит ошибка, и объясните точно, где и какая это ошибка. И поместите код между тегами "pre", чтобы он был правильно читаем.

F-ES Sitecore

Используйте отладчик, чтобы пройти через код и выяснить, почему он возвращает null. Этот код слишком сложен и включает в себя внешнюю информацию, такую как классы и текстовые файлы, чтобы кто-то мог легко его протестировать.

Member 12749751

Но отладчик не входит в метод Gettoken() для дальнейшей проверки

Afzaal Ahmad Zeeshan

Затем попробуйте отладить функцию обертывания, которая далее вызывает этот метод.

Afzaal Ahmad Zeeshan

Было бы здорово отладить код и посмотреть, что заставляет его возвращать null.

Member 12749751

просто проясните одно сомнение предположим, что мы издеваемся над methd getToken() и внутри этого GetToken() есть еще один вызов другого метода, так что мы должны издеваться и над этим?

Afzaal Ahmad Zeeshan

Не обязательно, нет. Но всегда хорошо тестировать функции индивидуально—в этом и заключается цель модульного тестирования. Если вы тестируете одну функцию, скажем, main, то вся цель модульного тестирования терпит неудачу. Точно так же отсутствие насмешек и тестирования внутренних функций также оставляет место для ошибок, чтобы ввести ваш код.

Member 12749751

но пойдет ли отладчик внутрь метода, над которым мы издевались?

Richard MacCutchan

Вы обновили его, чтобы отформатировать код, но все еще не показали точно, где в коде возникает ошибка.

Member 12749751

Для тестирования модульное тестирование когда я отладки фактический метод, который пользователь Регистрация метода в том, что издевались над gettoken объект всегда имеет значение null и не abke, чтобы понять, после издевательской также, почему ответ имеет значение null

0 Ответов