Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

571
Views
Cómo burlarse de la biblioteca portátil RestSharp en Unit Test

Me gustaría hacer una maqueta de la clase RestClient con fines de prueba

 public class DataServices : IDataServices { private readonly IRestClient _restClient; public DataServices(IRestClient restClient) { _restClient = restClient; } public async Task<User> GetUserByUserName(string userName) { User user = null; // create a new request var restRequest = new RestRequest("User", Method.GET); // create REST parameters restRequest.AddParameter("userName", userName, ParameterType.QueryString); // execute the REST request var restResponse = await _restClient.Execute<User>(restRequest); if (restResponse.StatusCode.Equals(HttpStatusCode.OK)) { user = restResponse.Data; } return user; } }

Mi clase de prueba:

 [TestClass] public class DataServicesTest { public static IRestClient MockRestClient<T>(HttpStatusCode httpStatusCode, string json) { var mockIRestClient = new Mock<IRestClient>(); mockIRestClient.Setup(x => x.Execute<T>(It.IsAny<IRestRequest>())) .Returns(new RestResponse<T> { Data = JsonConvert.DeserializeObject<T>(json), StatusCode = httpStatusCode }); return mockIRestClient.Object; } [TestMethod] public async void GetUserByUserName() { var dataServices = new DataServices(MockRestClient<User>(HttpStatusCode.OK, "my json code")); var user = await dataServices.GetUserByUserName("User1"); Assert.AreEqual("User1", user.Username); } }

Pero no puedo instanciar el objeto RestResponse , tengo el siguiente error:

 .Returns(new RestResponse<T> { Data = JsonConvert.DeserializeObject<T>(json), StatusCode = httpStatusCode });

No se puede acceder al constructor interno protegido 'RestResponse' aquí.

¿Cómo puedo solucionar esto? Estoy usando el paquete nuget FubarCoder.RestSharp en una biblioteca portátil de Xamarin.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

IRestResponse<T> y devolver eso

 public static IRestClient MockRestClient<T>(HttpStatusCode httpStatusCode, string json) where T : new() { var data = JsonConvert.DeserializeObject<T>(json) var response = new Mock<IRestResponse<T>>(); response.Setup(_ => _.StatusCode).Returns(httpStatusCode); response.Setup(_ => _.Data).Returns(data); var mockIRestClient = new Mock<IRestClient>(); mockIRestClient .Setup(x => x.Execute<T>(It.IsAny<IRestRequest>())) .ReturnsAsync(response.Object); return mockIRestClient.Object; }

La prueba también debe actualizarse para que sea asíncrona.

 [TestMethod] public async Task GetUserByUserName() { //Arrange var client = MockRestClient<User>(HttpStatusCode.OK, "my json code"); var dataServices = new DataServices(client); //Act var user = await dataServices.GetUserByUserName("User1"); //Assert Assert.AreEqual("User1", user.Username); }
over 4 years ago · Santiago Trujillo Report

0

No encontré ninguna gran respuesta, así que terminé escribiendo una biblioteca de ayuda. Lo publiqué en NuGet - MoqRestSharp.Helpers. Este proyecto tiene como objetivo ayudar a la prueba unitaria de RestSharp, ya que amplía Mock, por lo que me ayudó a probar mis solicitudes de RestSharp y el manejo de errores de respuesta.

utiliza moq

  • Enlace NuGet
  • Enlace al repositorio : los ejemplos también están en el proyecto

¡Los comentarios siempre son bienvenidos!

over 4 years ago · Santiago Trujillo Report

0

Solución completa

 using Moq; using Newtonsoft.Json; using NUnit.Framework; using RestSharp; using System.Net; namespace RestMockTest { public class Tests { [Test] public void Test1() { var client = MockRestClient<User>(HttpStatusCode.OK, "{\"Name\":\"User1\"}"); var restRequest = new RestRequest("api/item/", Method.POST); var restResponse = client.Execute<User>(restRequest); var user = restResponse.Data; Assert.AreEqual("User1", user.Name); } public static IRestClient MockRestClient<T>(HttpStatusCode httpStatusCode, string json) where T : new() { var data = JsonConvert.DeserializeObject<T>(json); var response = new Mock<IRestResponse<T>>(); response.Setup(_ => _.StatusCode).Returns(httpStatusCode); response.Setup(_ => _.Data).Returns(data); var mockIRestClient = new Mock<IRestClient>(); mockIRestClient .Setup(x => x.Execute<T>(It.IsAny<IRestRequest>())) .Returns(response.Object); return mockIRestClient.Object; } } public class User { public string Name { get; set; } } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!