Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure函数单元测试错误(TimerTrigger.HttpFunction)_C#_Azure_Unit Testing_Testing_Azure Functions - Fatal编程技术网

C# Azure函数单元测试错误(TimerTrigger.HttpFunction)

C# Azure函数单元测试错误(TimerTrigger.HttpFunction),c#,azure,unit-testing,testing,azure-functions,C#,Azure,Unit Testing,Testing,Azure Functions,我目前正在遵循此指南向Azure功能应用程序添加测试 目前我已经构建了8个Azure函数,它们都工作得很好,我还添加了一个Functions.Tests项目,并在其中引用了Azure Functions项目 下面是函数。测试当前的样子 using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Xunit; namespace Functions.Tests { public class Functions

我目前正在遵循此指南向Azure功能应用程序添加测试

目前我已经构建了8个Azure函数,它们都工作得很好,我还添加了一个Functions.Tests项目,并在其中引用了Azure Functions项目

下面是函数。测试当前的样子

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Xunit;

namespace Functions.Tests
{
public class FunctionsTests
{
    private readonly ILogger logger = TestFactory.CreateLogger();

    [Fact]
    public async void Http_trigger_should_return_known_string()
    {
        var request = TestFactory.CreateHttpRequest("name", "Bill");
        var response = (OkObjectResult)await HttpFunction.Run(request, logger);
        Assert.Equal("Hello, Bill", response.Value);
    }

    [Theory]
    [MemberData(nameof(TestFactory.Data), MemberType = typeof(TestFactory))]
    public async void Http_trigger_should_return_known_string_from_member_data(string queryStringKey, string queryStringValue)
    {
        var request = TestFactory.CreateHttpRequest(queryStringKey, queryStringValue);
        var response = (OkObjectResult)await HttpFunction.Run(request, logger);
        Assert.Equal($"Hello, {queryStringValue}", response.Value);
    }

    [Fact]
    public void Timer_should_log_message()
    {
        var logger = (ListLogger)TestFactory.CreateLogger(LoggerTypes.List);
        TimerTrigger.Run(null, logger);
        var msg = logger.Logs[0];
        Assert.Contains("C# Timer trigger function executed at", msg);
    }
}
}
但是,我在FunctionsTests.cs中遇到以下错误

我已经尝试了VisualStudio中所有建议的修复,并查看了在线资源,但没有成功。也许我错过了一个推荐人?我不确定,因为我已经一字不差地遵循了指南

使用的Azure函数示例:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace Exemplar
{
public static class getCase
{
    [FunctionName("getCase")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = "v1/case/caseId")] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

        return name != null
            ? (ActionResult)new OkObjectResult($"Hello, {name}")
            : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
    }
}

}

在我看来,它缺少对您的azure functios项目的引用,请确保您已通过以下方式添加引用:

右键单击测试项目 选择“添加”菜单 选择参考 选择项目选项卡左侧菜单,然后标记功能项目的复选框 单击“确定”
假设所提供的包含函数的项目被引用,测试只需要安排和执行目标函数,如链接示例所示

[Fact]
public async Task getCase_should_return_known_string()
{
    var request = TestFactory.CreateHttpRequest("name", "Bill");
    var response = (OkObjectResult)await getCase.Run(request, logger);
    Assert.Equal("Hello, Bill", response.Value);
}

[Theory]
[MemberData(nameof(TestFactory.Data), MemberType = typeof(TestFactory))]
public async Task getCase_should_return_known_string_from_member_data(string queryStringKey, string queryStringValue)
{
    var request = TestFactory.CreateHttpRequest(queryStringKey, queryStringValue);
    var response = (OkObjectResult)await getCase.Run(request, logger);
    Assert.Equal($"Hello, {queryStringValue}", response.Value);
}

还应避免使用异步void。重构这些测试以使用异步任务。

HttpFunction和TimerTrigger在本例中是正在测试的Azure函数。您的函数类的名称是什么?这就是你应该使用的。还要避免使用async void重构这些测试以使用asyncTask@Nkosi我有一个名为Examples的c项目,它有几个函数,比如getEntity。在这种情况下,HttpFunction是否会更改为Examples.getEntity.Run?是的,就是这样。将其中一个函数添加到问题中,以便我们可以向您展示如何测试它。它们是静态函数还是实例函数?@Nkosi试图用我的应用程序中的相关函数替换HttpFunction,但是VS将只重新注册项目示例,而不是其中的azurefunctions。@Nkosi能够成功地用Exemplar.getCase.Run替换TimerTrigger,但是,HttpFunction不接受类似的替换。如果重复此步骤,则表明引用中正确引用了functions项目。我可以从测试项目调用Functions项目,但不能调用Functions项目中的单个Azure函数。这是可行的,我没有使用您描述的正确值,一旦我更改了它们,我的两个测试就通过了。我的第三个失败,值为Not found:C Timer trigger函数在执行,但我相信这是因为getCase函数中没有使用TimerTrigger。就重构任务的void而言,这是一个简单的切换还是我需要一些其他引用/扩展等…谢谢@MD9简单开关。只要把那些空的东西变成任务就行了。显然,需要使用System.Threading.Tasks;应该包括在内。