我的Azure功能代码如下所示
public static class MyHttpTriggerFunction
{
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
// some business logic
if (valid)
{
return req.CreateResponse(HttpStatusCode.OK, true);
}
else
{
return req.CreateResponse(HttpStatusCode.BadRequest, "some error message");
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的测试项目中,我正在阅读如下结果:
var result = await MyHttpTriggerFunction.Run(req, log).ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)
执行该函数后,当它尝试在结果变量中返回响应时,测试方法失败并出现异常.
**
System.InvalidOperationException:请求没有关联的配置对象,或者提供的配置为null.
**
我确保测试项目具有相同的System.Net.Http.HttpRequestMessageExtension
dll.
如果我更改功能代码不使用CreateResponse
扩展方法(此扩展方法来自VS 2017模板的代码)并返回如下所示的响应,我会在测试方法中获得响应并且测试用例运行正常.
var res = new HttpResponseMessage();
if (valid)
{
res.StatusCode = HttpStatusCode.OK;
res.Content = new ObjectContent<bool>(true, new JsonMediaTypeFormatter());
return res;
}
else …
Run Code Online (Sandbox Code Playgroud) 我正在使用WebApi2开展项目.在我的测试项目中,我正在使用Moq和XUnit.
到目前为止,测试一个api已经很简单了
[Fact()]
public void GetCustomer()
{
var id = 2;
_customerMock.Setup(c => c.FindSingle(id))
.Returns(FakeCustomers()
.Single(cust => cust.Id == id));
var result = new CustomersController(_customerMock.Object).Get(id);
var negotiatedResult = result as OkContentActionResult<Customer>;
Assert.NotNull(negotiatedResult);
Assert.IsType<OkNegotiatedContentResult<Customer>>(negotiatedResult);
Assert.Equal(negotiatedResult.Content.Id,id);
}
Run Code Online (Sandbox Code Playgroud)
现在我正在进行一些有点复杂的事情,我需要从请求标头中访问值.
我通过扩展IHttpActionResult创建了自己的Ok()结果
public OkContentActionResult(T content,HttpRequestMessage request)
{
_request = request;
_content = content;
}
Run Code Online (Sandbox Code Playgroud)
这允许我有一个小助手从请求中读取标头值.
public virtual IHttpActionResult Post(Customer customer)
{
var header = RequestHeader.GetHeaderValue("customerId", this.Request);
if (header != "1234")
Run Code Online (Sandbox Code Playgroud)
我是怎么想用虚拟请求设置Moq的?
我花了最后一个小时左右的时间寻找一个允许我用webapi做这个的例子但是我似乎无法找到任何东西.
到目前为止.....我很确定api的错误,但我有
// arrange
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>(); …
Run Code Online (Sandbox Code Playgroud)