Tôi muốn dịch vụ ServiceStack của mình có thể kiểm tra được.Trong ServiceStack có thể giả lập đối tượng Request.OriginalRequest cho các bài kiểm tra đơn vị không?
Hiện nay tôi có:
[RequireFormsAuthentication]
public object Delete(DeleteRequest request)
{
var originalRequest = (HttpRequest)Request.OriginalRequest;
var identity = originalRequest.RequestContext.HttpContext.User.Identity;
return othercode(identity);
}
đâu RequireFormsAuthentication là
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);
}
}
}
Tôi đã chế giễu ra tất cả các phụ thuộc được sử dụng bởi 'othercode()' và tất cả những gì còn lại là những thứ đó là trong Dịch vụ lớp cơ sở. Có một mô hình/chiến lược/cách tiếp cận/cái gì tôi đang thiếu mà làm cho tầm thường này?
Đó bao gồm khá nhiều, trên thực tế. Cảm ơn! Một điều nữa, tuy nhiên: bạn có biết làm thế nào tôi có thể ghi đè lên thành viên được bảo vệ 'Yêu cầu'? (dòng 4 trong khối mã đầu tiên của tôi sẽ thất bại với NRE) – Robin
Ngoài ra ... có vẻ như 'HttpRequest' là một lớp niêm phong và không thể bị chế nhạo. – Robin
Vâng, HttpReqeust được niêm phong Tôi nghĩ bạn có thể truyền tới HttpRequestBase thay thế? Dòng 12 (mockedRequestContext.Stub (x => x.Get()). Return (mockedHttpRequest)) Nên cho phép bạn giả lập thành viên Request. –
paaschpa