c# - In ServiceStack is it possible to mock the Request.OriginalRequest object for unit tests? -
i'd make servicestack service testable.
presently have:
[requireformsauthentication] public object delete(deleterequest request) { var originalrequest = (httprequest)request.originalrequest; var identity = originalrequest.requestcontext.httpcontext.user.identity; return othercode(identity); }
where requireformsauthentication is
public class requireformsauthenticationattribute : requestfilterattribute { public override void execute(ihttprequest req, ihttpresponse res, object requestdto) { var originalrequest = (httprequest)req.originalrequest; var identity = originalrequest.requestcontext.httpcontext.user.identity; if (!identity.isauthenticated) { res.statuscode = (int)httpstatuscode.forbidden; res.endservicestackrequest(skipheaders: true); } } }
i've mocked out dependencies used 'othercode()' , that's left stuff that's in base class service. there pattern/strategy/approach/something i'm missing makes trivial?
i apologize not using moq...already had of done using rhinomocks. think concept should transfer moq. this might resource this.
anyway, think test code below should started. seam mocking request.originalrequest
replaceing service.requestcontext
mock object. have mock beyond that. it's going lot of 'mocking' , if repeat 'are mocking me' every time mock class it's enjoyable.
[test] public void testsomethign() { var mockedrequestcontext = mockrepository.generatemock<irequestcontext>(); var mockedhttprequest = mockrepository.generatemock<ihttprequest>(); var mockedoriginalrequest = mockrepository.generatemock<httprequestbase>(); var mockedoriginalrequestcontext = mockrepository.generatemock<requestcontext>(); mockedoriginalrequest.stub(x => x.requestcontext).return(mockedoriginalrequestcontext); mockedhttprequest.stub(x => x.originalrequest).return(mockedoriginalrequest); mockedrequestcontext.stub(x => x.get<ihttprequest>()).return(mockedhttprequest); var service = new servicetests() { requestcontext = mockedrequestcontext }; service.delete(new deleterequest()); }