Je veux tester cette méthode en utilisant Moq. Est-ce que quelqu'un peut me dire comment faire ça? Je joins l'ID utilisateur et la valeur dans la chaîne de requête. Comment imiter cela dans moq. Le nom de la classe est RestClient.cs. J'ai créé une interface appelée IRestClient. interface publique IRestClient { chaîne MakeRequest (chaîne ID utilisateur, valeur de chaîne); }Tests unitaires utilisant le framework Moq
Ceci est la méthode makeRequest de la classe RESTClient
public string MakeRequest(string userId,string value)
{
Logger.Info("Entering method MakeRequest()." + "Input Parameter: " + userId+Constant.NewLine+value);
string strResponseValue = string.Empty;
// The HttpWebRequest class allows you to programatically make web requests against an HTTP server.
// create the WebRequest instantiated for making the request to the specified URI.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Constant.webServerURI+"?id="+userId + Constant.UserValueAppend + value);
//Gets or sets the method for the request.(Overrides WebRequest.Method.)
request.Method = httpMethod.ToString();
//Initially response from webserver is set to null.
HttpWebResponse response = null;
try
{
// Get the response in the response object of type HttpWebResponse
// The request object of HttpWebRequest class is used to "get" the response (GetResponse()) from WebServer and store it in the response object
response = (HttpWebResponse)request.GetResponse();
// We check that the response StatusCode is good and we can proceed
if (response.StatusCode != HttpStatusCode.OK)
{
Logger.Error("Error" + response.StatusCode.ToString());
throw new ApplicationException(Constant.ErrorDisplay + response.StatusCode.ToString());
}
// Process the response string
// We obtain the ResponseStream from the webserver using "get" (GetResponseStream())
// The Stream Class provides a generic view of a sequence of bytes
using (Stream responseStream = response.GetResponseStream())
{
if (responseStream != null)
{
using (StreamReader reader = new StreamReader(responseStream))
{
//read the stream and store it in string strResponseValue
strResponseValue = reader.ReadToEnd();
}//End of StreamReader
}
}//End of using ResponseStream
}// End of using Response
catch (Exception ex)
{
Logger.Error("Error" + ex.Message.ToString());
strResponseValue = ("Error " + ex.Message.ToString());
}
finally
{
if (response != null)
{
((IDisposable)response).Dispose();
}
}
//return the string strResponseValue
Logger.Info("Leaving method MakeRequest." + "Output parameter: " + strResponseValue);
return strResponseValue;
}
Ceci est ma tentative de création de la moq dans ma classe de unittest appelé RestClientTests.cs
[TestMethod]
public void TestMethod1()
{
var expected = "response content";
var expectedBytes = Encoding.UTF8.GetBytes(expected);
var responseStream = new MemoryStream();
responseStream.Write(expectedBytes, 0, expectedBytes.Length);
responseStream.Seek(0, SeekOrigin.Begin);
var mockRestClient = new Mock<IRestClient>();
var mockHttpRequest = new Mock<HttpWebRequest>();
var response = new Mock<HttpWebResponse>();
response.Setup(c => c.GetResponseStream()).Returns(responseStream);
mockHttpRequest.Setup(c => c.GetResponse()).Returns(response.Object);
var factory = new Mock<IHttpWebRequestFactory>();
factory.Setup(c => c.Create(It.IsAny<string>())).Returns(mockHttpRequest.Object);
var actualRequest = factory.Object.Create("http://localhost:8080");
actualRequest.Method = WebRequestMethods.Http.Get;
string actual;
using (var httpWebResponse = (HttpWebResponse)actualRequest.GetResponse())
{
using (var streamReader = new StreamReader(httpWebResponse.GetResponseStream()))
{
actual = streamReader.ReadToEnd();
}
}
mockRestClient.Setup(moq => moq.MakeRequest("xxx", "s")).Returns(actual);
}
mon interface IhttpWebRequestFactory ressemble ce:
interface IHttpWebRequestFactory
{
HttpWebRequest Create(string uri);
}
Je ne suis pas Je suis sur comment le tester
Pourriez-vous donner un exemple de ce que vous venez de dire par le code .. de dire le code d'état est ok –
Je suis en train de tester la méthode makeRequest dans la classe Restclient –
merci beaucoup @arghtype –