c# - Using .Net WebRequest Factory -
as richard willis suggests in http://blog.salamandersoft.co.uk/index.php/2009/10/how-to-mock-httpwebrequest-when-unit-testing/ i'm trying call web request moking behavior.
for (i asking me if i'm messing here) implemented iwebrequestcreate , extended webrequest , webresponse. (more details in link codes)
but in code had test register (webrequest.registerprefix
) prefix:
[test] public void test() { var = 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)
then, got error: invalid uri: hostname not parsed.
but why? in populatewithmeterdata(meter meter)
have call:
webrequest request = webrequest.create(urllistmeteringdata); webresponse ws = request.getresponse();
some suggestion? interesting post class implementations?
edit: @matthew ask:
public class webrequestcreatemock : iwebrequestcreate { static webrequest _nextrequest; static readonly object lockobject = new object(); static public webrequest nextrequest { { 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; } }
and url like: mockprefix://nomatterurl
since error "invalid uri: hostname not parsed." screwing uri "mockprefix://nomatterurl"
i had problem once because forgot add "/" between domain uri , request parameters.
can post "nomatteruri" looks like?
Comments
Post a Comment