이 문제를 해결하기 위해 IOC 패턴을 사용하여 결국 서비스 생성자에 전달되는 IQueryStringHelper 인터페이스를 만들었습니다. 전달되지 않으면 기본적으로 "실제"QueryStringHelper 클래스를 사용합니다. 테스트 케이스를 실행할 때 오버로드 된 서비스 생성자를 사용하여 TestQueryStringHelper 인스턴스를 전달하므로 쿼리 문자열에 대한 모의 값을 설정할 수 있습니다.
다음은 쿼리 문자열 헬퍼 코드입니다.
public interface IQueryStringHelper {
string[] GetParameters();
}
public class QueryStringHelper : IQueryStringHelper {
public string[] GetParameters() {
var properties = OperationContext.Current.IncomingMessageProperties;
var property = properties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;
string queryString = property.QueryString;
return queryString.Split('&');
}
}
public class TestQueryStringHelper : IQueryStringHelper {
private string mockValue;
public TestQueryStringHelper(string value) {
mockValue = value;
}
public string[] GetParameters() {
return mockValue.Split('&');
}
}
그리고 서비스 구현 :
public partial class RestService : IRestService {
private IAuthenticator _auth;
private IQueryStringHelper _queryStringHelper;
public RestService() : this(new Authenticator(), new QueryStringHelper()) {
}
public RestService(IAuthenticator auth, IQueryStringHelper queryStringHelper = null) {
_auth = auth;
if (queryStringHelper != null) {
_queryStringHelper = queryStringHelper;
}
}
}
어떻게 테스트 케이스에서 소비하는 방법 :
string odata = String.Format("$filter=Id eq guid'{0}'", "myguid");
var service = new RestService(m_auth,new TestQueryStringHelper(odata));
var entities = service.ReadAllEntities();
는 희망이 다른 사람을 도움이됩니다.
또는 WCFMock https://wcfmock.codeplex.com/을 사용할 수 있습니다. – PositiveGuy