C# 如何模拟RestSharp AddDefaultHeader方法
我正在尝试使用RestSharp(版本106.6.9)对该方法进行单元测试: 如果我的方法包含对C# 如何模拟RestSharp AddDefaultHeader方法,c#,unit-testing,moq,restsharp,C#,Unit Testing,Moq,Restsharp,我正在尝试使用RestSharp(版本106.6.9)对该方法进行单元测试: 如果我的方法包含对.AddDefaultHeader的调用,那么我似乎无法测试该方法。我考虑创建自己的模拟对象,但IRestClient接口需要几十种方法 关于如何测试我的方法有什么建议吗?如果您想检查是否添加了默认标题,可以使用spy如下所示: [Fact] public void Test() { var mock = new Mock<IRestClient>(
.AddDefaultHeader
的调用,那么我似乎无法测试该方法。我考虑创建自己的模拟对象,但IRestClient接口需要几十种方法
关于如何测试我的方法有什么建议吗?如果您想检查是否添加了默认标题,可以使用
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);
}
本例使用
xUnit
作为测试运行程序,但其余部分应相同。Moq不模拟扩展方法。弄清楚扩展方法访问什么,这就是您模拟的
该扩展方法的源可用,并最终调用
/// <summary>
/// Add a parameter to use on every request made with this client instance
/// </summary>
/// <param name="restClient">The IRestClient instance</param>
/// <param name="p">Parameter to add</param>
/// <returns></returns>
public static IRestClient AddDefaultParameter(this IRestClient restClient, Parameter p)
{
if (p.Type == ParameterType.RequestBody)
{
throw new NotSupportedException(
"Cannot set request body from default headers. Use Request.AddBody() instead.");
}
restClient.DefaultParameters.Add(p);
return restClient;
}
Moq不模拟扩展方法。找出扩展方法访问的内容,以及您模拟的内容。根据当前显示的内容,应该可以在不模拟扩展调用的情况下执行该测试
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.
[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);
}
restClient.DefaultParameters.Add(p);
/// <summary>
/// Add a parameter to use on every request made with this client instance
/// </summary>
/// <param name="restClient">The IRestClient instance</param>
/// <param name="p">Parameter to add</param>
/// <returns></returns>
public static IRestClient AddDefaultParameter(this IRestClient restClient, Parameter p)
{
if (p.Type == ParameterType.RequestBody)
{
throw new NotSupportedException(
"Cannot set request body from default headers. Use Request.AddBody() instead.");
}
restClient.DefaultParameters.Add(p);
return restClient;
}
//...
mockRestClient.SetupAllProperties();
//...