Azure Functions ontwikkelen met Visual Studio
Met Visual Studio kunt u C#-klassebibliotheekfuncties ontwikkelen, testen en implementeren in Azure. Als dit uw eerste ervaring is met Azure Functions, raadpleegt u Een inleiding tot Azure Functions.
Visual Studio biedt de volgende voordelen wanneer u uw functies ontwikkelt:
- Bewerk, bouw en voer functies uit op uw lokale ontwikkelcomputer.
- Publiceer uw Azure Functions project rechtstreeks naar Azure en maak indien nodig Azure-resources.
- Gebruik C#-kenmerken om functiebindingen rechtstreeks in de C#-code te declareren.
- Vooraf gecompileerde C#-functies ontwikkelen en implementeren. Vooraf uitgevoerde functies bieden betere cold-startprestaties dan op C#-scripts gebaseerde functies.
- Codeer uw functies in C# met alle voordelen van Visual Studio-ontwikkeling.
Dit artikel bevat informatie over het gebruik van Visual Studio om C#-klassebibliotheekfuncties te ontwikkelen en deze te publiceren naar Azure. Voordat u dit artikel leest, kunt u overwegen om de quickstart voor Functies voor Visual Studio te voltooien.
Tenzij anders vermeld, zijn de weergegeven procedures en voorbeelden voor Visual Studio 2022. Zie de opmerkingen bij de release of de opmerkingen bij de preview-release voor meer informatie over visual Studio 2022-releases.
Vereisten
Azure Functions Hulpprogramma's. Als u Azure Function Tools wilt toevoegen, neemt u de Azure-ontwikkelworkload op in uw Visual Studio-installatie. Als u Visual Studio 2017 gebruikt, moet u mogelijk enkele extra installatiestappen volgen.
Andere resources die u nodig hebt, zoals een Azure Storage-account, worden tijdens het publicatieproces in uw abonnement gemaakt.
-
Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.
Een Azure Functions-project maken
Met de Azure Functions-projectsjabloon in Visual Studio wordt een C#-klassebibliotheekproject gemaakt dat u kunt publiceren naar een functie-app in Azure. U kunt een functie-app gebruiken om functies te groeperen in een logische eenheid, zodat u resources eenvoudiger kunt beheren, implementeren, schalen en delen.
Selecteer in Visual Studio-menu Bestand>Nieuw>Project.
Voer in Een nieuw project makenfuncties in het zoekvenster in, kies de sjabloon Azure Functions en selecteer vervolgens Volgende.
Voer in Uw nieuwe project configureren een projectnaam in voor uw project en selecteer vervolgens Maken. De functie-appnaam moet geldig zijn als een C#-naamruimte. Gebruik dus geen onderstrepingstekens, afbreekstreepjes of andere niet-alfanumerieke tekens.
Gebruik de waarden in de volgende tabel voor de instellingen van Een nieuw Azure Functions-toepassing:
Instelling Waarde Beschrijving .NET-versie .NET 6 Met deze waarde maakt u een functieproject dat wordt uitgevoerd met versie 4.x van de Azure Functions runtime. Azure Functions 1.x ondersteunt .NET Framework. Raadpleeg Overzicht van Azure Functions-runtime voor meer informatie. Functiesjabloon HTTP-trigger Met deze waarde wordt er een functie gemaakt die wordt geactiveerd door een HTTP-aanvraag. Opslagaccount (AzureWebJobsStorage) Opslagemulator Omdat voor een functie-app in Azure een opslagaccount is vereist, wordt er een toegewezen of gemaakt wanneer u uw project naar Azure publiceert. Een HTTP-trigger gebruikt geen Azure Storage-accountverbindingsreeks. Alle andere triggers vereisen een geldige Azure Storage-accountverbindingsreeks. Verificatieniveau Anoniem De gemaakte functie kan door iedere client worden geactiveerd zonder een sleutel op te geven. Met deze autorisatie-instelling kunt u eenvoudig uw nieuwe functie testen. Raadpleeg Autorisatiesleutels in de HTTP- en webhookbindingen voor meer informatie over sleutels en autorisatie. Zorg ervoor dat u het Autorisatieniveau instelt op Anoniem. Wanneer u het standaardniveau van Functie kiest, moet u de functiesleutel opnemen in aanvragen om toegang te krijgen tot het eindpunt van de functie.
Selecteer OK om het functieproject en de door HTTP geactiveerde functie te maken.
Nadat u een Azure Functions-project hebt gemaakt, wordt met de projectsjabloon een C#-project gemaakt, wordt het Microsoft.NET.Sdk.Functions
NuGet-pakket geïnstalleerd en wordt het doelframework ingesteld. Het nieuwe project bevat de volgende bestanden:
host.json: hiermee kunt u de Functions-host configureren. Deze instellingen zijn zowel van toepassing wanneer ze lokaal als in Azure worden uitgevoerd. Zie naslaginformatie over host.json voor meer informatie.
local.settings.json: onderhoudt instellingen die worden gebruikt bij het lokaal uitvoeren van functies. Deze instellingen worden niet gebruikt bij het uitvoeren in Azure. Zie Bestand met lokale instellingen voor meer informatie.
Belangrijk
Omdat het bestand local.settings.json geheimen kan bevatten, moet u het uitsluiten van het broncodebeheer van uw project. Zorg ervoor dat de instelling Kopiëren naar uitvoermap voor dit bestand is ingesteld op Kopiëren indien nieuwer.
Zie Functions class library project (Functions-klassebibliotheekproject) voor meer informatie.
Lokale instellingen
Wanneer u in een functie-app in Azure wordt uitgevoerd, worden de instellingen die uw functies nodig hebben , veilig opgeslagen in de app-instellingen. Tijdens de lokale ontwikkeling worden deze instellingen toegevoegd aan het Values
-object in het bestand local.settings.json. In het bestand local.settings.json worden ook instellingen opgeslagen die worden gebruikt door lokale ontwikkelhulpprogramma's.
Omdat local.settings.json geheimen kan bevatten, zoals verbindingsreeksen, moet u deze nooit opslaan in een externe opslagplaats. Zie Bestand met lokale instellingen voor meer informatie over lokale instellingen.
Visual Studio uploadt de instellingen in local.settings.json niet automatisch wanneer u het project publiceert. Als u er zeker van wilt zijn dat deze instellingen ook aanwezig zijn in uw functie-app in Azure, uploadt u ze nadat u uw project hebt gepubliceerd. Zie Instellingen voor functie-apps voor meer informatie. De waarden in een ConnectionStrings
verzameling worden nooit gepubliceerd.
Uw code kan ook de waarden van de functie-app-instellingen lezen als omgevingsvariabelen. Zie Omgevingsvariabelen voor meer informatie.
Het project configureren voor lokale ontwikkeling
De Functions-runtime maakt intern gebruik van een Azure Storage-account. Voor alle triggertypen behalve HTTP en webhooks stelt u de Values.AzureWebJobsStorage
sleutel in op een geldig Azure Storage-account connection string. Uw functie-app kan ook de Azurite-emulator gebruiken voor de AzureWebJobsStorage
verbindingsinstelling die is vereist voor het project. Als u de emulator wilt gebruiken, stelt u de waarde van AzureWebJobsStorage
in op UseDevelopmentStorage=true
. Wijzig deze instelling in een werkelijk opslagaccount connection string vóór de implementatie. Zie Lokale opslagemulator voor meer informatie.
Het opslagaccount instellen connection string:
Ga in Azure Portal naar uw opslagaccount.
Kopieer op het tabblad Toegangssleutels onder Beveiliging en netwerken de verbindingsreeks van sleutel1.
Open in uw project het bestand local.settings.json en stel de waarde van de
AzureWebJobsStorage
sleutel in op de connection string u hebt gekopieerd.Herhaal de vorige stap om unieke sleutels toe te voegen aan de
Values
matrix voor eventuele andere verbindingen die door uw functies zijn vereist.
Een functie toevoegen aan uw project
In C#-klassebibliotheekfuncties worden de bindingen die door de functie worden gebruikt gedefinieerd door het toepassen van kenmerken in de code. Wanneer u uw functietriggers maakt op basis van de opgegeven sjablonen, worden de triggerkenmerken voor u toegepast.
Klik in Solution Explorer met de rechtermuisknop op het projectknooppunt en selecteerNieuw itemtoevoegen>.
Selecteer Azure-functie, voer een naam in voor de klasse en selecteer vervolgens Toevoegen.
Kies uw trigger, stel de bindingseigenschappen in en selecteer vervolgens Toevoegen. In het volgende voorbeeld ziet u de instellingen voor het maken van een triggerfunctie voor wachtrijopslag.
U wordt vervolgens gevraagd om te kiezen tussen de Azurite-opslagemulator of om te verwijzen naar een ingericht Azure-opslagaccount.
In dit triggervoorbeeld wordt een connection string met een sleutel met de naam
QueueStorage
gebruikt. Deze sleutel, die is opgeslagen in het bestand local.settings.json, verwijst naar de Azurite-emulator of een Azure-opslagaccount.Bekijk de zojuist toegevoegde klasse. U ziet een statische
Run()
methode die is toegewezen met hetFunctionName
kenmerk . Dit kenmerk geeft aan dat de methode het toegangspunt voor de functie is.De volgende C#-klasse vertegenwoordigt bijvoorbeeld een eenvoudige triggerfunctie voor wachtrijopslag:
using System; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Host; using Microsoft.Extensions.Logging; namespace FunctionApp1 { public static class Function1 { [FunctionName("QueueTriggerCSharp")] public static void Run([QueueTrigger("myqueue-items", Connection = "QueueStorage")]string myQueueItem, ILogger log) { log.LogInformation($"C# Queue trigger function processed: {myQueueItem}"); } } }
Er wordt een bindingsspecifiek kenmerk toegepast op elke bindingsparameter die wordt opgegeven bij de invoerpuntmethode. Het kenmerk gebruikt de bindingsgegevens als parameters. In het vorige voorbeeld is voor de eerste parameter een QueueTrigger
kenmerk toegepast, waarmee een triggerfunctie voor wachtrijopslag wordt aangegeven. De naam van de wachtrij en connection string instellingsnaam worden als parameters doorgegeven aan het QueueTrigger
kenmerk. Zie Azure Queue Storage-bindingen voor Azure Functions voor meer informatie.
Gebruik de bovenstaande procedure om meer functies toe te voegen aan uw functie-app-project. Elke functie in het project kan een andere trigger hebben, maar een functie moet precies één trigger hebben. Zie concepten voor Azure Functions triggers en bindingen voor meer informatie.
Bindingen toevoegen
Net als bij triggers worden invoer- en uitvoerbindingen als bindingskenmerken toegevoegd aan uw functie. Voeg als volgt bindingen toe aan een functie:
Zorg ervoor dat u het project hebt geconfigureerd voor lokale ontwikkeling.
Voeg het juiste NuGet-extensiepakket voor de specifieke binding toe door de bindingsspecifieke NuGet-pakketvereisten te zoeken in het referentieartikel voor de binding. Zoek bijvoorbeeld de pakketvereisten voor de Event Hubs-trigger in het artikel Event Hubs-bindingsreferentie.
Gebruik de volgende opdracht in de Package Manager-console om een specifiek pakket te installeren:
Install-Package Microsoft.Azure.WebJobs.Extensions.<BINDING_TYPE> -Version <TARGET_VERSION>
Vervang in dit voorbeeld door
<BINDING_TYPE>
de naam die specifiek is voor de bindingsextensie en<TARGET_VERSION>
door een specifieke versie van het pakket, zoals3.0.0-beta5
. Geldige versies worden vermeld op de afzonderlijke pakketpagina's op NuGet.org. De primaire versies die overeenkomen met Functions runtime 1.x of 2.x worden opgegeven in het referentieartikel voor de binding.Als er app-instellingen zijn die de binding nodig heeft, voegt u deze toe aan de
Values
verzameling in het bestand met lokale instellingen.De functie gebruikt deze waarden wanneer deze lokaal wordt uitgevoerd. Wanneer de functie wordt uitgevoerd in de functie-app in Azure, worden de instellingen van de functie-app gebruikt.
Voeg het juiste bindingskenmerk toe aan de methodehandtekening. In het volgende voorbeeld activeert een wachtrijbericht de functie en maakt de uitvoerbinding een nieuw wachtrijbericht met dezelfde tekst in een andere wachtrij.
public static class SimpleExampleWithOutput { [FunctionName("CopyQueueMessage")] public static void Run( [QueueTrigger("myqueue-items-source", Connection = "AzureWebJobsStorage")] string myQueueItem, [Queue("myqueue-items-destination", Connection = "AzureWebJobsStorage")] out string myQueueItemCopy, ILogger log) { log.LogInformation($"CopyQueueMessage function processed: {myQueueItem}"); myQueueItemCopy = myQueueItem; } }
De verbinding met Queue Storage wordt verkregen via de
AzureWebJobsStorage
instelling. Zie het referentieartikel voor de specifieke binding voor meer informatie.
Zie Ondersteunde bindingen voor een volledige lijst van de bindingen die door Functions worden ondersteund.
Functies lokaal uitvoeren
Met Azure Functions Core-hulpprogramma's kunt u Azure Functions-projecten uitvoeren op uw lokale ontwikkelcomputer. Wanneer u op F5 drukt om fouten op te sporen in een Functions-project, begint de lokale Functions-host (func.exe) te luisteren op een lokale poort (meestal 7071). Alle aanroepbare functie-eindpunten worden naar de uitvoer geschreven en u kunt deze eindpunten gebruiken om uw functies te testen. Zie Werken met Azure Functions Core Tools voor meer informatie. U wordt gevraagd deze hulpprogramma's te installeren wanneer u voor het eerst een functie start vanuit Visual Studio.
Uw functie starten in Visual Studio in de foutopsporingsmodus:
Druk op F5. Accepteer desgevraagd de aanvraag van Visual Studio om Azure Functions Core (CLI)-hulpprogramma's te downloaden en installeren. Mogelijk moet u ook een firewall-uitzondering inschakelen, zodat de hulpprogramma's HTTP-aanvragen kunnen afhandelen.
Terwijl het project wordt uitgevoerd, test u uw code zoals u een geïmplementeerde functie zou testen.
Wanneer u Visual Studio uitvoert in de foutopsporingsmodus, worden onderbrekingspunten bereikt zoals verwacht.
Zie Testfuncties voor een meer gedetailleerd testscenario met Visual Studio.
Publiceren naar Azure
Wanneer u vanuit Visual Studio publiceert, wordt een van de twee implementatiemethoden gebruikt:
- Web Deploy: Verpakt en implementeert Windows-apps op elke IIS-server.
- Zip Deploy with Run-From-Package ingeschakeld: aanbevolen voor Azure Functions implementaties.
Gebruik de volgende stappen om uw project te publiceren naar een functie-app in Azure.
Klik in Solution Explorer met de rechtermuisknop op het project en selecteer Publiceren. Selecteer in Doelde optie Azure en vervolgens Volgende.
Selecteer Azure-functie-app (Windows) voor het specifieke doel, waarmee een functie-app wordt gemaakt die wordt uitgevoerd in Windows, en selecteer vervolgens Volgende.
Kies in het functie-exemplaareen nieuwe Azure-functie maken...
Maak een nieuw exemplaar met behulp van de waarden die in de volgende tabel zijn opgegeven:
Instelling Waarde Beschrijving Naam Wereldwijd unieke naam Naam waarmee uw nieuwe functie-app uniek wordt aangeduid. Accepteer deze naam of voer een nieuwe in. Geldige tekens zijn a-z
,0-9
en-
.Abonnement Uw abonnement Het te gebruiken Azure-abonnement. Accepteer dit abonnement of selecteer een nieuwe uit de vervolgkeuzelijst. Resourcegroep Naam van uw resourcegroep De resourcegroep waarin u uw functie-app wilt maken. Selecteer een bestaande resourcegroep in de vervolgkeuzelijst of selecteer Nieuw om een nieuwe resourcegroep te maken. Abonnemtsype Verbruik Wanneer u uw project publiceert in een functie-app die wordt uitgevoerd in een verbruiksabonnement, betaalt u alleen voor uitvoeringen van uw functie-app. Andere hostingabonnement kosten meer. Locatie Locatie van de app-service Kies een Locatie in een regio bij u in de buurt of in de buurt van andere services die door uw functies worden gebruikt. Azure Storage Storage-account voor algemeen gebruik Er is een Azure-opslagaccount vereist voor de Functions-runtime. Selecteer Nieuw om een algemeen opslagaccount te configureren. U kunt ook een bestaand account kiezen dat voldoet aan de vereisten voor een opslagaccount. Selecteer Maken om een functie-app en de bijbehorende resources te maken in Azure. De status van het maken van resources wordt linksonder in het venster weergegeven.
Zorg ervoor dat in het Functions-exemplaar het selectievakje Uitvoeren vanuit pakketbestand is ingeschakeld. Uw functie-app wordt geïmplementeerd met Zip-implementeren met de modus Uitvoeren vanuit pakket ingeschakeld. Zip Deploy is de aanbevolen implementatiemethode voor uw functions-project, wat resulteert in betere prestaties.
Selecteer Voltooien en selecteer op de pagina Publiceren de optie Publiceren om het pakket met uw projectbestanden te implementeren in de nieuwe functie-app in Azure.
Nadat de implementatie is voltooid, wordt de hoofd-URL van de functie-app in Azure weergegeven op het tabblad Publiceren .
Kies op het tabblad Publiceren in de sectie Hosting de optie Openen in Azure Portal. Hiermee opent u de azure-resource van de nieuwe functie-app in de Azure Portal.
Instellingen voor functie-app
Visual Studio uploadt deze instellingen niet automatisch wanneer u het project publiceert. Alle instellingen die u toevoegt in local.settings.json, moet u ook toevoegen aan de functie-app in Azure.
De eenvoudigste manier om de vereiste instellingen te uploaden naar uw functie-app in Azure, is door de drie puntjes naast de sectie Hosting uit te vouwen en de koppeling Azure App Service instellingen beheren te selecteren die wordt weergegeven nadat u uw project hebt gepubliceerd.
Als u deze koppeling selecteert, wordt het dialoogvenster Toepassingsinstellingen voor de functie-app weergegeven, waar u nieuwe toepassingsinstellingen kunt toevoegen of bestaande kunt wijzigen.
Lokaal geeft een instellingswaarde weer in het bestand local.settings.json en Extern geeft een huidige instellingswaarde weer in de functie-app in Azure. Kies Instelling toevoegen om een nieuwe app-instelling te maken. Gebruik de koppeling Waarde invoegen vanuit lokaal om een instellingswaarde naar het veld Extern te kopiëren. Wijzigingen in behandeling worden naar het bestand met lokale instellingen en de functie-app geschreven wanneer u OK selecteert.
Notitie
Het bestand local.settings.json is standaard niet ingecheckt in broncodebeheer. Dit betekent dat als u een lokaal Functions-project kloont vanuit broncodebeheer, het project geen bestand local.settings.json heeft. In dit geval moet u het bestand local.settings.json handmatig maken in de hoofdmap van het project, zodat het dialoogvenster Toepassingsinstellingen werkt zoals verwacht.
U kunt toepassingsinstellingen ook op een van de volgende andere manieren beheren:
- De Azure Portal gebruiken.
- Gebruik de
--publish-local-settings
publicatieoptie in de Azure Functions Core Tools. - Gebruik de Azure CLI.
Foutopsporing op afstand
Als u op afstand fouten in uw functie-app wilt opsporen, moet u een foutopsporingsconfiguratie van uw project publiceren. U moet ook externe foutopsporing inschakelen in uw functie-app in Azure.
In deze sectie wordt ervan uitgegaan dat u al naar uw functie-app hebt gepubliceerd met behulp van een releaseconfiguratie.
Overwegingen voor foutopsporing op afstand
- Foutopsporing op afstand wordt niet aanbevolen voor een productieservice.
- Als u Just My Code-foutopsporing hebt ingeschakeld, schakelt u dit uit.
- Vermijd lange stops bij onderbrekingspunten bij externe foutopsporing. Azure behandelt een proces dat langer dan een paar minuten wordt gestopt als een proces dat niet reageert en sluit het proces af.
- Terwijl u foutopsporing uitvoert, verzendt de server gegevens naar Visual Studio, wat van invloed kan zijn op de bandbreedtekosten. Zie Azure-prijzen voor informatie over bandbreedtetarieven.
- Externe foutopsporing wordt na 48 uur automatisch uitgeschakeld in uw functie-app. Na 48 uur moet u foutopsporing op afstand opnieuw inschakelen.
Het foutopsporingsprogramma bijvoegen
De manier waarop u het foutopsporingsprogramma koppelt, is afhankelijk van uw uitvoeringsmodus. Bij het opsporen van fouten in een geïsoleerde werkproces-app moet u momenteel het externe foutopsporingsprogramma koppelen aan een afzonderlijk .NET-proces en zijn er verschillende andere configuratiestappen vereist.
Wanneer u klaar bent, moet u externe foutopsporing uitschakelen.
Een extern foutopsporingsprogramma koppelen aan een functie-app die wordt uitgevoerd met de Functions-host:
Selecteer op het tabblad Publiceren het beletselteken (...) in de sectie Hosting en kies vervolgens Foutopsporingsprogramma bijvoegen.
Visual Studio maakt verbinding met uw functie-app en schakelt externe foutopsporing in als deze nog niet is ingeschakeld. Ook wordt het foutopsporingsprogramma gevonden en gekoppeld aan het hostproces voor de app. Op dit moment kunt u fouten in uw functie-app opsporen zoals normaal.
Externe foutopsporing uitschakelen
Nadat u klaar bent met het op afstand opsporen van uw code, moet u externe foutopsporing uitschakelen in de Azure Portal. Foutopsporing op afstand wordt automatisch uitgeschakeld na 48 uur, voor het geval u dit vergeet.
Selecteer op het tabblad Publiceren in uw project het beletselteken (...) in de sectie Hosting en kies Openen in Azure Portal. Met deze actie wordt de functie-app geopend in de Azure Portal waarop uw project is geïmplementeerd.
Selecteer in de functie-app Configuratie onder instellingen, kies Algemene instellingen, stel Externe foutopsporing in op Uit en selecteer Opslaan en vervolgens Doorgaan.
Nadat de functie-app opnieuw is opgestart, kunt u geen externe verbinding meer maken met uw externe processen. U kunt hetzelfde tabblad in de Azure Portal gebruiken om externe foutopsporing buiten Visual Studio in te schakelen.
Functies bewaken
De aanbevolen manier om de uitvoering van uw functies te bewaken, is door uw functie-app te integreren met Azure-toepassing Insights. Wanneer u een functie-app maakt in de Azure Portal, wordt deze integratie standaard voor u uitgevoerd. Wanneer u echter uw functie-app maakt tijdens het publiceren van Visual Studio, is de integratie in uw functie-app in Azure niet voltooid. Zie Application Insights-integratie inschakelen voor meer informatie over het verbinden van Application Insights met uw functie-app.
Zie Azure Functions bewaken voor meer informatie over bewaking met behulp van Application Insights.
Functies testen
In deze sectie wordt beschreven hoe u een C#-functie-app-project maakt in Visual Studio en hoe u xUnit uitvoert en test.
Instellen
Als u uw omgeving wilt instellen, maakt u een functie en test u de app. De volgende stappen helpen u bij het maken van de apps en functies die nodig zijn om de tests te ondersteunen:
- Maak een nieuwe Functions-app en geef deze de naam Functions
- Maak een HTTP-functie op basis van de sjabloon en geef deze de naam MyHttpTrigger.
- Maak een timerfunctie op basis van de sjabloon en geef deze de naam MyTimerTrigger.
- Maak een xUnit Test-app in de oplossing en noem deze Functions.Tests. Verwijder de standaardtestbestanden.
- NuGet gebruiken om een verwijzing uit de test-app toe te voegen aan Microsoft.AspNetCore.Mvc
- Verwijs naar de Functions-app vanuit deapp Functions.Tests .
Testklassen maken
Nu de projecten zijn gemaakt, kunt u de klassen maken die worden gebruikt om de geautomatiseerde tests uit te voeren.
Voor elke functie is een exemplaar van ILogger nodig om de logboekregistratie van berichten af te handelen. Sommige tests registreren geen berichten of maken zich geen zorgen over hoe logboekregistratie wordt geïmplementeerd. Andere tests moeten berichten evalueren die zijn vastgelegd om te bepalen of een test slagent is.
U maakt een nieuwe klasse met de naam ListLogger
, die een interne lijst met berichten bevat die tijdens het testen moeten worden geëvalueerd. Voor het implementeren van de vereiste ILogger
interface heeft de klasse een bereik nodig. In de volgende klasse wordt een bereik gesimuleerd voor de testcases die moeten worden doorgegeven aan de ListLogger
klasse.
Maak een nieuwe klasse in het project Functions.Tests met de naam NullScope.cs en voer de volgende code in:
using System;
namespace Functions.Tests
{
public class NullScope : IDisposable
{
public static NullScope Instance { get; } = new NullScope();
private NullScope() { }
public void Dispose() { }
}
}
Maak vervolgens een nieuwe klasse in het project Functions.Tests met de naam ListLogger.cs en voer de volgende code in:
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
namespace Functions.Tests
{
public class ListLogger : ILogger
{
public IList<string> Logs;
public IDisposable BeginScope<TState>(TState state) => NullScope.Instance;
public bool IsEnabled(LogLevel logLevel) => false;
public ListLogger()
{
this.Logs = new List<string>();
}
public void Log<TState>(LogLevel logLevel,
EventId eventId,
TState state,
Exception exception,
Func<TState, Exception, string> formatter)
{
string message = formatter(state, exception);
this.Logs.Add(message);
}
}
}
De ListLogger
klasse implementeert de volgende leden zoals contracted door de ILogger
interface:
BeginScope: Bereiken voegen context toe aan uw logboekregistratie. In dit geval verwijst de test alleen naar het statische exemplaar in de
NullScope
klasse om de test te laten functioneren.IsEnabled: er wordt een standaardwaarde van
false
opgegeven.Logboek: Deze methode maakt gebruik van de opgegeven
formatter
functie om het bericht op te maken en voegt vervolgens de resulterende tekst toe aan deLogs
verzameling.
De Logs
verzameling is een exemplaar van List<string>
en wordt geïnitialiseerd in de constructor.
Maak vervolgens een nieuw bestand in het project Functions.Tests met de naam LoggerTypes.cs en voer de volgende code in:
namespace Functions.Tests
{
public enum LoggerTypes
{
Null,
List
}
}
Deze opsomming specificeert het type logboekregistratie dat door de tests wordt gebruikt.
Maak nu een nieuwe klasse in het project Functions.Tests met de naam TestFactory.cs en voer de volgende code in:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Internal;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Primitives;
using System.Collections.Generic;
namespace Functions.Tests
{
public class TestFactory
{
public static IEnumerable<object[]> Data()
{
return new List<object[]>
{
new object[] { "name", "Bill" },
new object[] { "name", "Paul" },
new object[] { "name", "Steve" }
};
}
private static Dictionary<string, StringValues> CreateDictionary(string key, string value)
{
var qs = new Dictionary<string, StringValues>
{
{ key, value }
};
return qs;
}
public static HttpRequest CreateHttpRequest(string queryStringKey, string queryStringValue)
{
var context = new DefaultHttpContext();
var request = context.Request;
request.Query = new QueryCollection(CreateDictionary(queryStringKey, queryStringValue));
return request;
}
public static ILogger CreateLogger(LoggerTypes type = LoggerTypes.Null)
{
ILogger logger;
if (type == LoggerTypes.List)
{
logger = new ListLogger();
}
else
{
logger = NullLoggerFactory.Instance.CreateLogger("Null Logger");
}
return logger;
}
}
}
De TestFactory
klasse implementeert de volgende leden:
Gegevens: deze eigenschap retourneert een IEnumerable-verzameling voorbeeldgegevens. De sleutelwaardeparen vertegenwoordigen waarden die worden doorgegeven aan een querytekenreeks.
CreateDictionary: Deze methode accepteert een sleutel-waardepaar als argumenten en retourneert een nieuwe
Dictionary
die wordt gebruikt omQueryCollection
querytekenreekswaarden weer te geven.CreateHttpRequest: Met deze methode wordt een HTTP-aanvraag gemaakt die is geïnitialiseerd met de opgegeven querytekenreeksparameters.
CreateLogger: op basis van het type logboekregistratie retourneert deze methode een loggerklasse die wordt gebruikt voor het testen. De
ListLogger
houdt logboekberichten bij die beschikbaar zijn voor evaluatie in tests.
Maak ten slotte een nieuwe klasse in het project Functions.Tests met de naam FunctionsTests.cs en voer de volgende code in:
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 MyHttpTrigger.Run(request, logger);
Assert.Equal("Hello, Bill. This HTTP triggered function executed successfully.", 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 MyHttpTrigger.Run(request, logger);
Assert.Equal($"Hello, {queryStringValue}. This HTTP triggered function executed successfully.", response.Value);
}
[Fact]
public void Timer_should_log_message()
{
var logger = (ListLogger)TestFactory.CreateLogger(LoggerTypes.List);
new MyTimerTrigger().Run(null, logger);
var msg = logger.Logs[0];
Assert.Contains("C# Timer trigger function executed at", msg);
}
}
}
De leden die in deze klasse zijn geïmplementeerd, zijn:
Http_trigger_should_return_known_string: met deze test wordt een aanvraag gemaakt met de querytekenreekswaarden van
name=Bill
een HTTP-functie en wordt gecontroleerd of het verwachte antwoord wordt geretourneerd.Http_trigger_should_return_string_from_member_data: deze test maakt gebruik van xUnit-kenmerken om voorbeeldgegevens te verstrekken aan de HTTP-functie.
Timer_should_log_message: met deze test wordt een exemplaar van
ListLogger
gemaakt en doorgegeven aan een timerfunctie. Zodra de functie is uitgevoerd, wordt het logboek gecontroleerd om te controleren of het verwachte bericht aanwezig is.
Als u toegang wilt tot toepassingsinstellingen in uw tests, kunt u een IConfiguration
exemplaar met gesimuleerde omgevingsvariabelewaarden in uw functie injecteren.
Tests uitvoeren
Als u de tests wilt uitvoeren, gaat u naar Test Explorer en selecteert u Alle tests uitvoeren in weergave.
Foutopsporingstests
Als u fouten in de tests wilt opsporen, stelt u een onderbrekingspunt in voor een test, navigeert u naar Test Explorer en selecteert u Fouten > opsporen bij laatste uitvoering uitvoeren.
Azure Functions hulpprogramma's met Visual Studio 2017
Azure Functions Tools is beschikbaar in de Azure-ontwikkelworkload vanaf Visual Studio 2017. In Visual Studio 2017 worden Azure Functions Tools als een afzonderlijke extensie geïnstalleerd met de workload Azure-ontwikkeling. In Visual Studio 2019 en hoger wordt de extensie Azure Functions hulpprogramma's bijgewerkt als onderdeel van Visual Studio.
Wanneer u de installatie van Visual Studio 2017 bijwerkt, moet u ervoor zorgen dat u de meest recente versie van de Azure Functions Tools gebruikt. In de volgende secties ziet u hoe u de extensie Azure Functions Tools in Visual Studio 2017 kunt controleren en (indien nodig) bijwerken.
Uw versie van hulpprogramma's controleren in Visual Studio 2017
Kies in het menu Extrade optie Extensies en Updates. Vouw Geïnstalleerde>hulpprogramma's uit en kies vervolgens Azure Functions en Hulpprogramma's voor webtaken.
Noteer de geïnstalleerde versie en vergelijk deze versie met de nieuwste versie die wordt vermeld in de opmerkingen bij de release.
Als uw versie ouder is, werkt u uw hulpprogramma's bij in Visual Studio, zoals wordt weergegeven in de volgende sectie.
Uw hulpprogramma's bijwerken in Visual Studio
Vouw in het dialoogvenster Extensies en UpdatesUpdates>Visual Studio Marketplace uit, kies hulpprogramma's voor Azure Functions en webtaken en selecteer Bijwerken.
Nadat de update van de hulpprogramma's is gedownload, selecteert u Sluiten en sluit u Vervolgens Visual Studio om de hulpprogramma-update te activeren met het VSIX-installatieprogramma.
Kies in VSIX Installer de optie Wijzigen om de hulpprogramma's bij te werken.
Nadat de update is voltooid, kiest u Sluiten en start u Visual Studio opnieuw.
Volgende stappen
Zie Werken met Azure Functions Core Tools voor meer informatie over de Azure Functions Core Tools.
Zie Azure Functions naslaginformatie voor C#-ontwikkelaars voor meer informatie over het ontwikkelen van functies als .NET-klassebibliotheken. Dit artikel bevat ook koppelingen naar voorbeelden over het gebruik van kenmerken om de verschillende typen bindingen te declareren die door Azure Functions worden ondersteund.