Moq를 사용하여이 방법을 테스트하고 싶습니다. 누군가 이걸 어떻게하는지 말해 줄 수 있니? 쿼리 문자열에 사용자 ID와 값을 연결하려고합니다. moq에서 이것을 모방하는 법. 클래스 이름은 RestClient.cs입니다. IRestClient라는 인터페이스를 만들었습니다. 공용 인터페이스 IRestClient { 문자열 MakeRequest (string userID, string value); }Moq 프레임 워크를 사용한 단위 테스트
이것은이 RestClientTests.cs
라는 내 유닛 테스트 클래스의 MOQ를 만드는 나의 시도는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;
}
위해 RESTClient 클래스의하여 makeRequest 방법 내 IhttpWebRequestFactory 인터페이스의 모습
[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);
}
이 :
interface IHttpWebRequestFactory
{
HttpWebRequest Create(string uri);
}
나는 아니오 이 방법을 테스트하는 방법을 반드시 알아 두십시오.
은 방금 코드를 통해 말의 예를 제공 할 수를 ..의 상태 코드는 내가 테스트하기 위해 노력하고있어 –
확인 말한다 RestClient 클래스의 makeRequest 메소드 –
감사합니다. @arghtype –