Ich möchte meinen ServiceStack-Dienst testbar machen.In ServiceStack ist es möglich, das Request.Original Request-Objekt für Komponententests zu verspotten?
Derzeit habe ich:
[RequireFormsAuthentication]
public object Delete(DeleteRequest request)
{
var originalRequest = (HttpRequest)Request.OriginalRequest;
var identity = originalRequest.RequestContext.HttpContext.User.Identity;
return othercode(identity);
}
Wo RequireFormsAuthentication ist
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);
}
}
}
Ich habe alle Abhängigkeiten von verwendeten verspottete out 'othercode()' und alles, was übrig bleibt, ist das Zeug, das in der ist Basisklasse Service. Gibt es ein Muster/Strategie/Ansatz/etwas, das ich vermisse, das macht das trivial?
Das deckt ziemlich viel, eigentlich. Vielen Dank! Eine weitere Sache jedoch: Weißt du, wie ich das geschützte Mitglied 'Request' überschreiben kann? (Zeile 4 in meinem ersten Codeblock wird mit NRE fehlschlagen) – Robin
Auch ... es scheint, 'HttpRequest' ist eine versiegelte Klasse und kann nicht verspottet werden. – Robin
Yeah, HttpReqeust ist versiegelt Ich denke du kannst stattdessen auf HttpRequestBase umwandeln? Zeile 12 (mockedRequestContext.Stub (x => x.Get()). Rückgabe (mockedHttpRequest)) Sollte es Ihnen ermöglichen, das Request-Mitglied zu verspotten. –
paaschpa