Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: Azure Logic Apps (Standard)
Enhetstestning är en viktig metod som håller din app eller lösning tillförlitlig och korrekt under hela livscykeln för programvaruutveckling. Enhetstester hjälper dig att effektivt och systematiskt verifiera de viktigaste komponenterna i din lösning.
För standardarbetsflöden för logikappar kan du skapa enhetstester med hjälp av Visual Studio Code och Tillägget Azure Logic Apps (Standard). Med den här funktionen kan du använda arbetsflödesdefinitioner för att skapa enhetstester och skräddarsy dem efter scenarier som stöds av logikappslösningen – allt utan att behöva anslutningar till externa tjänster, system eller API:er. Med den här metoden kan du testa dina arbetsflöden utan att behöva interagera med externa tjänster, system eller API:er och ger följande fördelar:
Förbättra arbetsflödets kvalitet genom att identifiera och åtgärda potentiella problem innan du distribuerar till andra miljöer.
Effektivisera enhetstestintegrering med din utvecklingsprocess, samtidigt som du säkerställer konsekvent och korrekt arbetsflödesbeteende.
Den här guiden visar hur du skapar en enhetstestdefinition från ett arbetsflöde. Den här definitionen hånar de externa anropen från varje arbetsflödesåtgärd utan att ändra arbetsflödeslogik. När du skapar ett enhetstest för ett arbetsflöde får du ett enhetstestprojekt som innehåller följande mappar:
En mapp som innehåller starkt typade klasser för varje simulerbar operation i arbetsflödet.
En mapp för varje enhetstestdefinition. Den här mappen innehåller en C#-fil som innehåller en exempelklass och metoder. Du använder den här klassen och metoderna för att konfigurera egna intyg, bekräfta att arbetsflödet fungerar som förväntat och se till att arbetsflödet fungerar tillförlitligt och förutsägbart i ditt större Azure-ekosystem.
Förutsättningar
Ett Azure-konto och prenumeration. Om du inte har någon prenumeration kan du registrera ett kostnadsfritt Azure-konto.
Ett standardlogikappsprojekt i Visual Studio Code som innehåller minst en arbetsflödesdefinition som ska användas för att skapa ett enhetstest.
Mer information om installation och projektskapande av Visual Studio Code finns i Skapa standardarbetsflöden för logikappar med Visual Studio Code.
Begränsningar och kända problem
Den här versionen stöder för närvarande endast C# för att skapa enhetstester.
Den här versionen stöder inte icke-hånade åtgärder. Kontrollera att alla åtgärder i arbetsflödets utförandeväg är simulerade.
Den här versionen stöder inte följande åtgärdstyper:
- Integreringskontoåtgärder
- EDI-koda och avkoda processer
Granska de grundläggande begreppen
Följande lista innehåller grundläggande men viktiga begrepp om enhetstester för Standard-arbetsflöden:
Enhetstest för logikapp
En kontrollerad arbetsflödeskörning som matar in falska objekt. Dessa objekt representerar antingen arbetsflödesutlösaren eller åtgärder som är beroende av externa tjänster eller system.
Åtgärd som kan simuleras
En arbetsflödesåtgärd som är beroende av en extern tjänst eller ett externt system. Du kan konvertera dessa åtgärder till simulerade åtgärder för att skapa och köra enhetstest.
Skapa ett enhetstest från en arbetsflödesdefinition
Öppna standardlogikappprojektet i Visual Studio Code.
I projektet expanderar du mappen för arbetsflödesdefinition.
På snabbmenyn för filenworkflow.json väljer du Öppna designer.
Välj Skapa enhetstest i designerverktygsfältet.
Ange ett namn som ska användas för enhetstestet, enhetstestklassen och C#-filen.
En ny mapp med namnet Tester visas nu på projektarbetsytan. Den här mappen har följande struktur:
Mapp eller fil Beskrivning Tests
|| <logic-app-name>I Testsmappen visas en <logic-app-name> mapp när du lägger till enhetstester i ett logikapp-projekt.Tests
|| <logic-app-name>
||| <workflow-name>I mappen < logic-app-name> visas en <workflow-name> mapp när du lägger till enhetstester för ett arbetsflöde.Tests
|| <logic-app-name>
||| <workflow-name>
||||MockOutputs
|||||<operation-name-outputs>.cs< workflow-name> I mappenMockOutputsinnehåller mappen en C#-fil (.cs) med starkt skrivna klasser för varje anslutningsåtgärd i arbetsflödet. Varje .cs filnamn använder följande format:
<operation-name>[Trigger\|Action]Output.cs
Om en anslutningsåtgärd har dynamiska kontrakt visas en klass för varje dynamisk typ. En dynamisk typ refererar till en åtgärdsparameter som har olika indata och utdata baserat på värdet för parametern. Du kan använda de här klasserna för att utöka enhetstesterna och skapa nya modeller från grunden.Tests
|| <logic-app-name>
||| <workflow-name>
|||| <unit-test-name>
||||| <unit-test-name>.csI mappen < workflow-name> innehåller mappen <unit-test-name> en <unit-test-name>.cs-fil. Du använder den här filen, som innehåller en C#-exempelklass och -metoder, för att köra och kontrollera resultat. Du kan redigera den här filen så att den matchar dina specifika testscenarier.
Granska *.cs-filen för enhetstest
Den här enhetstestklassen tillhandahåller ett ramverk för att testa arbetsflöden i standardlogikappar genom att mocka utlösare och åtgärder. Med den här klassen kan du testa arbetsflöden utan att anropa externa tjänster eller API:er.
Testklassstruktur
En typisk enhetstestklass använder följande struktur:
[TestClass]
public class <unit-test-name>
{
public TestExecutor TestExecutor;
[TestInitialize]
public void Setup()
{
this.TestExecutor = new TestExecutor("<workflow-name>/testSettings.config");
}
// Add test methods here.
// Add helper methods here.
}
Setup()-metod
Den här metoden instansierar TestExecutor klassen med hjälp av sökvägen till konfigurationsfilen för testinställningar. Metoden körs före varje testkörning och skapar en ny instans av TestExecutor.
[TestInitialize]
public void Setup()
{
this.TestExecutor = new TestExecutor("<workflow-name>/testSettings.config");
}
Exempel på testmetoder
I följande avsnitt beskrivs exempeltestmetoder som du kan använda i enhetstestklassen.
Statiskt test av falska data
Följande metod visar hur du använder statiska mock-data för att testa arbetsflödet. I den här metoden kan du utföra följande uppgifter:
- Ange egenskapsvärden för dina simulerade åtgärder.
- Kör arbetsflödet med konfigurerade testdata.
- Bekräfta att exekveringen lyckades.
[TestMethod]
public async Task <workflow-name>_<unit-test-name>_ExecuteWorkflow_SUCCESS_Sample1()
{
// PREPARE mock: Generate mock trigger data.
var triggerMockOutput = new WhenMessagesAreAvailableInAQueuePeeklockTriggerOutput();
// Sample that shows how to set the properties for triggerMockOutput
// triggerMockOutput.Body.Id = "SampleId";
var triggerMock = new WhenMessagesAreAvailableInAQueuePeeklockTriggerMock(outputs: triggerMockOutput);
// Generate mock action data.
var actionMockOutput = new CallExternalAPIActionOutput();
// Sample that shows how to set the properties for actionMockOutput
// actionMockOutput.Body.Name = "SampleResource";
// actionMockOutput.Body.Id = "SampleId";
var actionMock = new CallExternalAPIActionMock(name: "Call_External_API", outputs: actionMockOutput);
// ACT: Create the UnitTestExecutor instance. Run the workflow with mock data.
var testMock = new TestMockDefinition(
triggerMock: triggerMock,
actionMocks: new Dictionary<string, ActionMock>()
{
{actionMock.Name, actionMock}
});
var testRun = await this.TestExecutor
.Create()
.RunWorkflowAsync(testMock: testMock).ConfigureAwait(continueOnCapturedContext: false);
// ASSERT: Confirm successful workflow execution and that the status is 'Succeeded'.
Assert.IsNotNull(value: testRun);
Assert.AreEqual(expected: TestWorkflowStatus.Succeeded, actual: te
stRun.Status);
}
Dynamiskt modelldatatest
Följande metod visar hur man använder dynamisk mockdata med callbackmetoder. Den här metoden ger dig två alternativ som dynamiskt genererar falska data:
- Definiera en separat återanropsmetod.
- Använd en inline lambda-funktion.
Med båda metoderna kan du skapa dynamiska svar baserat på enhetstestkörningskontexten.
[TestMethod]
public async Task <workflow-name>_<unit-test-name>_ExecuteWorkflow_SUCCESS_Sample2()
{
// PREPARE: Generate mock trigger data.
var triggerMockOutput = new WhenMessagesAreAvailableInAQueuePeeklockTriggerOutput();
// Sample that shows how to set triggerMockOutput properties.
// triggerMockOutput.Body.Flag = true;
var triggerMock = new WhenMessagesAreAvailableInAQueuePeeklockTriggerMock(outputs: triggerMockOutput);
// PREPARE: Generate mock action data.
// OPTION 1: Define a callback class.
var actionMock = new CallExternalAPIActionMock(name: "Call_External_API", onGetActionMock: CallExternalAPIActionMockOutputCallback);
// OPTION 2: Define inline with a lambda function.
/*var actionMock = new CallExternalAPIActionMock(name: "Call_External_API", onGetActionMock: (testExecutionContext) =>
{
return new CallExternalAPIActionMock(
status: TestWorkflowStatus.Succeeded,
outputs: new CallExternalAPIActionOutput {
// If this account contains a JObject Body,
// set the properties you want here:
// Body = "something".ToJObject()
}
);
});*/
// ACT: Create the UnitTestExecutor instance. Run the workflow with mock data.
var testMock = new TestMockDefinition(
triggerMock: triggerMock,
actionMocks: new Dictionary<string, ActionMock>()
{
{actionMock.Name, actionMock}
});
var testRun = await this.TestExecutor
.Create()
.RunWorkflowAsync(testMock: testMock).ConfigureAwait(continueOnCapturedContext: false);
// ASSERT: Confirm successful workflow execution and that the status is 'Succeeded'.
Assert.IsNotNull(value: testRun);
Assert.AreEqual(expected: TestWorkflowStatus.Succeeded, actual: testRun.Status);
}
Hjälpmetoder
I följande avsnitt beskrivs metoder som används av exempeltestmetoderna. Hjälpmetoder visas under testmetoderna i klassdefinitionen.
Återanropsmetod
Följande metod genererar dynamiskt falska data. Metodnamnet varierar beroende på det simulerade åtgärdsnamnet i testmetoderna för statiska eller dynamiska falska data. Du kan redigera den här metoden för att returnera olika mock-svar baserat på dina testscenariokrav eller använda den som en mall för att skapa dina egna dynamiska återuppringningsmetoder.
public CallExternalAPIActionMock CallExternalAPIActionMockOutputCallback(TestExecutionContext context)
{
// Sample mock data: Dynamically change the mocked data for 'actionName'.
return new CallExternalAPIActionMock(
status: TestWorkflowStatus.Succeeded,
outputs: new CallExternalAPIActionOutput {
// If this account contains a JObject Body,
// set the properties you want here:
// Body = "something".ToJObject()
}
);
}