Я пытаюсь провести модульное тестирование этого метода, который использует RestSharp (версия 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;
}
Это то, что я пробовал:
[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"));
}
Этот код строит,но выдает исключение времени выполнения, которое мешает моему тесту работать:
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.
Похоже, у меня нет способа проверить мой метод, если он включает вызов .AddDefaultHeader
. Я подумал о создании своего собственного фиктивного объекта, но для интерфейса IRestClient требуются десятки методов.
Есть предложения о том, как протестировать мой метод?