I'm trying to unit test this method which uses RestSharp (version 106.6.9):
public UserInfo GetUserInfo(string oauthToken)
{
_restClient.AddDefaultHeader("Authorization", "Bearer " + oauthToken);
var request = new RestRequest(_userInfoUrl);
var response = _restClient.Execute<UserInfo>(request);
if (!response.IsSuccessful)
{
throw new ApplicationException("Request for user info failed with HTTP status code " + response.StatusCode);
}
return response.Data;
}
This is what I tried:
[Test]
public void ShouldFailIfOAuthTokenExpired()
{
var mockRestClient = new Mock<IRestClient>();
mockRestClient.Setup(m => m.AddDefaultHeader("Authorization", "Bearer Some expired token"));
mockRestClient.Setup(m => m.Execute(It.IsAny<IRestRequest>())).Returns(new RestResponse() { StatusCode = System.Net.HttpStatusCode.Unauthorized });
var svc = new MyService(mockRestClient.Object, "my endpoint");
Assert.Throws<ApplicationException>(() => svc.GetUserInfo("Some expired token"));
}
This code builds, but throws a runtime exception that prevents my test from working:
System.NotSupportedException : Unsupported expression: m => m.AddDefaultHeader("Authorization", "Bearer Some expired token")
Extension methods (here: RestClientExtensions.AddDefaultHeader) may not be used in setup / verification expressions.
It appears there is no way for me to test my method if it includes a call to .AddDefaultHeader. I considered creating my own mock object, but the IRestClient interface requires dozens of methods.
Any suggestions on how to test my method?