public static class MockWebProxyHelper
{
public static void SetUp() {...}
public static void TearDown() {...}
public class Response
{
public string Header { get; set; } // default "HTTP/1.1 200 OK"
public string Body { get; set; } // default ""
}
public static Func<HttpMethods, string, Response> GetMockResponse
= delegate { return new Response(); };
}
[TestFixture]
public class StockCheckClientBackgroundWorkerTests
{
[TestFixtureSetUp]
public void StartFiddlerProxy()
{
MockWebProxyHelper.SetUp();
}
[TestFixtureTearDown]
public void StopFiddlerProxy()
{
MockWebProxyHelper.TearDown();
}[Test]
public void TestMockClientCall()
{
MockWebProxyHelper.GetMockResponse = (httpMethod, url) =>
new MockWebProxyHelper.Response(body:
@"{'productCount':1,
'products':[
{'productId':'1012881',
'categoryId':
'CAT13617200330',
'availableStock':'23'}
]}");
// dummy key - should work anyways, cos it's a mock!
var client = new StockCheckClient {AuthKey = "dummy-auth-key"};
List<Product> inStockProducts =
client.GetCategoryItemsInStock("CAT13617200330");
Assert.AreEqual(1, inStockProducts.Count);
Assert.AreEqual(23, inStockProducts[0].AvailableStock);
}
eg http://myapi.com/products?categoryId=CAT13617200330
filename "GET myapi_com_products_categoryId_CAT13617200330.txt":
HTTP/1.1 200 OK
{'productCount':1,'products':[{'productId':'1012881','categoryId':'CAT13617200330','availableStock':'23'}]}
[TestFixtureSetUp]
public void StartFiddlerProxy()
{
MockWebProxyHelper.SetUp();
MockWebProxyHelper.GetMockResponse = (httpMethod, url) =>
{
var file = url.Replace("http://", "")
.Replace('/', '_').Replace('?', '_').Replace('=', '_');
var lines = File.ReadAllLines(httpMethod + " " + file +".txt");
return new MockWebProxyHelper.Response(
header: lines.First(),
body: String.Join(Environment.NewLine, lines.Skip(1)));
}
}
MockWebProxyHelper.GetMockResponse =
(httpMethod, url) =>
{
// eg http://myapi.com/products?categoryId=CAT13617200330
var categoryId = url.Split('=').Last();
var products =
productsRepository.Where(x => x.CategoryId == categoryId);
var body = JsonConvert.SerializeObject(responseObject));
return new MockWebProxyHelper.Response(body: body);
};