Richard Willis가 http://blog.salamandersoft.co.uk/index.php/2009/10/how-to-mock-httpwebrequest-when-unit-testing/에 제안한대로 동작을 moking하는 중입니다..Net WebRequest Factory 사용
(나는 뭔가를 망쳐 놓는 지 물어 본다.) IWebRequestCreate를 구현하고 WebRequest와 WebResponse를 확장했다. (링크 코드에 대한 자세한 내용)
하지만 지금 내 코드에서 나는 (WebRequest.RegisterPrefix
) 접두사 레지스터 테스트했다 : Invalid URI: The hostname could not be parsed.
그런데 왜 :
[Test]
public void Test() {
var some = File.ReadAllBytes(@"TestData\WebService\admrond_13jan2011_14jan2011.xml");
WebRequest.RegisterPrefix("mockPrefix", new WebRequestCreateMock());
WebRequestFake request = WebRequestCreateMock.CreateRequestFake(some);
_remoteRepository.PopulateWithMeterData(_meter);
... (error in line before)
그럼,이 오류를 가지고 있습니까? 내 PopulateWithMeterData(Meter meter)
에서 나는이 전화를 가지고있다 :
WebRequest request = WebRequest.Create(urlListMeteringData);
WebResponse ws = request.GetResponse();
약간의 제안? 흥미로운 게시물 구현은 무엇입니까?
편집 :
public class WebRequestCreateMock : IWebRequestCreate {
static WebRequest _nextRequest;
static readonly object LockObject = new object();
static public WebRequest NextRequest {
get { return _nextRequest; }
set {
lock (LockObject) {
_nextRequest = value;
}
}
}
public WebRequest Create(Uri uri) {
return _nextRequest;
}
public static WebRequestFake CreateRequestFake(byte[] xmlStream) {
WebRequestFake webRequestFake = new WebRequestFake(xmlStream);
NextRequest = webRequestFake;
return webRequestFake;
}
}
public class WebRequestFake : WebRequest {
MemoryStream requestStream = new MemoryStream();
MemoryStream responseStream;
public override string Method { get; set; }
public override string ContentType { get; set; }
public override long ContentLength { get; set; }
public WebRequestFake(byte[] response) {
responseStream = new MemoryStream(response);
}
public override Stream GetRequestStream() {
return requestStream;
}
public override WebResponse GetResponse() {
return new WebReponseFake(responseStream);
}
}
public class WebReponseFake : WebResponse {
private readonly Stream _responseStream;
public WebReponseFake(Stream responseStream) {
_responseStream = responseStream;
}
public override Stream GetResponseStream() {
return _responseStream;
}
}
을하고 URL 뭔가 같다 : 질문 @Matthew과 같이 콜론 (':')으로 접두사를 등록해야 mockPrefix://NoMatterUrl
코드를 더 자세히 작성하고 요청을 작성하는 데 사용하는 URL의 예를 제공하십시오. –
@Custodio vlc 플러그인 비디오 대상 소스를 HTTPHanlder에 전달하려면 rtmp 링크를 사용하고 싶습니다. vlc 플러그인 플레이어에 라이브 스트림을 읽는 데 코드를 사용하는 방법을 알려주십시오. [내 질문은 여기] (http://stackoverflow.com/questions/21862260/http-handler-returns-target-source-for-vlc-plugin -player) – ZahidKakar