gpt4 book ai didi

c# - 如何模拟 RestSharp AddDefaultHeader 方法

转载 作者:行者123 更新时间:2023-12-04 02:43:09 26 4
gpt4 key购买 nike

我正在尝试对使用 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 接口(interface)需要许多方法。

关于如何测试我的方法有什么建议吗?

最佳答案

如果您想检查是否添加了默认 header ,您可以使用 spy像这样:

    [Fact]
public void Test()
{
var mock = new Mock<IRestClient>();
var spy = new List<Parameter>();
mock
.Setup(m => m.DefaultParameters.Add(It.IsAny<Parameter>()))
.Callback((Parameter p) => spy.Add(p));
var instance = mock.Object;

instance.AddDefaultParameter(new Parameter("Foo", "Bar", ParameterType.Cookie));

Assert.Equal("Bar", spy.Single().Value);
}

这使用了 .Callback Moq 的功能添加了添加的 Parameterspy .

之所以可行,是因为您可以在 source code 中看到对于 RestSharpextension method电话 AddDefaultParameter这又增加了一个 ParameterDefaultParameters :

restClient.DefaultParameters.Add(p);

此示例使用 xUnit作为测试跑者,但其余的应该是一样的。

关于c# - 如何模拟 RestSharp AddDefaultHeader 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58383409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com