ASP.NET Web API 2 is a great technology for creating RESTful web services.
However, there can be a challenge for unit testing if you need to mock the OAuth "Authorize" attribute on a controller's method.
This is where Moq comes in. It's available here - https://github.com/Moq/moq4 .
So, say if you have a controller method that uses the OAuth "Authorization" attribute and it needs unit test coverage then you can use Moq to setup your test.
Example psuedocode for controller method:
[OAuthAuthorization]
public CustomData GetCoolData()
{
// get data from route here
// more business logic
return CustomData object;
}
--------------
Example helper for setting up controller context and route data:
public HttpControllerContext SetupControllerContext(ApiController controller)
{
controller.ControllerContext = // new one up here or call another helper to populate object
controller.ControllerContext.Request = new HttpRequestMessage();
controller.ControllerContext.Request.Headers.Add("Authorization", "Bearer fakeToken");
controller.ControllerContext.RouteData = new HttpRouteData(new HttpRoute());
// Add any key value pairs to route data here
controller.ControllerContext.RouteData.Values.Add("key", valueObject);
return controller.ControllerContext;
}
Example test code snippet:
// Arrange
_controller.ControllerContext = SetupControllerContext(_controller);
// Setup mock here to mock the data provider and return what you'd like or throw if negative test
// Act
var result = _controller.GetCoolData();
// Assert
Assert.IsNotNull(result);
// do any further validation
That's pretty much it. There wasn't much online about how to do this so I wanted to share. Cheers.
No comments:
Post a Comment