The interfaces:-
public interface IHttp
{
Task<HttpResult> GetAsync(string url, string userAgent = null, string cookie = null);
Task<HttpResult> PostAsync(string uri, Dictionary<string, string> formData, string userAgent = null, string cookie = null);
List<MetaRefreshElement> GetMetaRefreshElements(List<string> list);
bool StatusIsSuccess(iPassGISHttpStatusCode code);
bool StatusIsRedirect(iPassGISHttpStatusCode code);
bool StatusIsSuccessOrRedirect(iPassGISHttpStatusCode code);
Task<HttpResult> GetOrPostAsync(iPassHttpMethodType method, string url, Dictionary<string, string> formData, string userAgent, string cookie = null);
}
The called function :-
public async Task<bool> AmIOnAsync()
{
try
{
string cookie = "";
var httpResult = await _http.GetAsync(_url, _userAgent, cookie);
if (_http.StatusIsSuccess(httpResult.StatusCode))
{
if (httpResult.Message.Contains(_amIONUrlEntry.ResponseSubstring))
{
return true;
}
}
}
catch (Exception exp)
{
}
return false;
}
The test function with stubbed method:-
[TestFixture]
public class AmIOnTest
{
private MockRepository mock = null;
private AmIOnHelper AmIOnObject=null;
private HttpResult _httpResult = null;
private AmIONUrlEntryType _amIONUrlEntry = null;
private IHttp _http;
string _url = "";
string _userAgent = "";
string cookie = "";
[SetUp]
public void setup()
{
_httpResult = new HttpResult();
mock = new MockRepository();
_http = mock.Stub<IHttp>();
AmIOnObject = new AmIOnHelper(_http);
_amIONUrlEntry = AmIONUrlEntryType.Default;
_url = _amIONUrlEntry.Url;
_userAgent = _amIONUrlEntry.UserAgent;
}
[Test]
public async Task AmIOnSuccessReturnTrue()
{
_httpResult.StatusCode = iPassGISHttpStatusCode.OK;
_httpResult.Message = GisConsts.ResponseSubString;
_http.Expect(x => x.GetAsync(_url, _userAgent, cookie)).Return(new Task<HttpResult>(()=>_httpResult));
_http.Expect(x =>x.StatusIsSuccess(_httpResult.StatusCode)).Return(true);
bool result = await AmIOnObject.AmIOnAsync();
Assert.IsTrue(result, "AmIOn should Have succeed");
}
[TearDown]
public void teardown()
{
_http = null;
AmIOnObject = null;
_httpResult = null;
}