Sdílet prostřednictvím


Vytváření testů jednotek z definic standardních pracovních postupů v Azure Logic Apps pomocí editoru Visual Studio Code

Platí pro: Azure Logic Apps (Standard)

Testování částí je základním postupem, který zajišťuje spolehlivost a přesnost vaší aplikace nebo řešení v průběhu životního cyklu vývoje softwaru. Testy jednotek pomáhají efektivně a systematicky ověřovat klíčové komponenty ve vašem řešení.

Pro pracovní postupy standardní aplikace logiky můžete vytvářet testy jednotek pomocí editoru Visual Studio Code a rozšíření Azure Logic Apps (Standard). Tato funkce umožňuje pomocí definic pracovních postupů vytvářet testy jednotek a přizpůsobovat je scénářům podporovaným řešením aplikace logiky – to vše bez nutnosti připojení k externím službám, systémům nebo rozhraním API. Tento přístup umožňuje otestovat pracovní postupy bez nutnosti pracovat s externími službami, systémy nebo rozhraními API a poskytuje následující výhody:

  • Zvýšení kvality pracovního postupu identifikací a řešením potenciálních problémů před nasazením do jiných prostředí.

  • Zjednodušte integraci jednotkových testů do procesu vývoje a zajistěte konzistentní a přesné chování pracovního postupu.

Tato příručka ukazuje, jak z pracovního postupu vytvořit definici jednotkového testu. Tato definice napodobí externí volání z každé operace pracovního postupu beze změny logiky pracovního postupu. Když vytvoříte test jednotek pro pracovní postup, získáte projekt testu jednotek, který obsahuje následující složky:

  • Složka, která obsahuje striktně typované třídy pro každou simulovatelnou operaci v pracovním postupu.

  • Složka pro každou definici jednotkového testu. Tato složka obsahuje soubor C#, který obsahuje ukázkovou třídu a metody. Tuto třídu a metody použijete k nastavení vlastních kontrolních výrazů, potvrzení toho, že se pracovní postup chová podle očekávání, a k zajištění jeho spolehlivého a předvídatelného chování ve vašem širším ekosystému Azure.

Požadavky

Omezení a známé problémy

  • Tato verze v současné době podporuje pouze jazyk C# pro vytváření testů jednotek.

  • Tato verze nepodporuje neposměšné akce. Ujistěte se, že všechny akce v rámci provádění pracovního postupu jsou simulované.

  • Tato verze nepodporuje následující typy akcí:

    • Akce integračního účtu
    • Akce kódování a dekódování EDI

Projděte si základní koncepty.

Následující seznam obsahuje základní, ale důležité koncepty testů jednotek pro standardní pracovní postupy:

  • Jednotkový test logické aplikace

    Řízené spuštění pracovního postupu, které vloží napodobené objekty. Tyto objekty představují buď trigger pracovního postupu, nebo akce, které závisí na externích službách nebo systémech.

  • Akce pro testování

    Akce pracovního postupu, která závisí na externí službě nebo systému. Tyto akce můžete převést na mockované akce pro vytvoření a spuštění jednotkového testu.

Vytvořte jednotkový test z definice pracovního postupu

  1. V editoru Visual Studio Code otevřete projekt aplikace logiky Standard.

  2. V projektu rozbalte složku definice pracovního postupu.

  3. V místní nabídce souboru workflow.json vyberte Otevřít Návrhář.

  4. Na panelu nástrojů návrháře vyberte Vytvořit jednotkový test.

    Snímek obrazovky znázorňující Visual Studio Code, projekt aplikace standardní logiky, návrhář pracovního postupu a vybraný příkaz pro vytvoření testu jednotek

  5. Zadejte název, který se má použít pro test jednotek, třídu testování jednotek a soubor jazyka C#.

    V pracovním prostoru projektu se teď zobrazí nová složka s názvem Testy . Tato složka má následující strukturu:

    Snímek obrazovky ukazuje Visual Studio Code, projekt standardní aplikace logiky a složku Testy se složkami testů jednotek a soubory.

    Složka nebo soubor Popis
    Tests
    || <logic-app-name>
    Ve složce Tests se zobrazí složka <logic-app-name>, když do projektu logické aplikace přidáte jednotkové testy.
    Tests
    || <logic-app-name>
    ||| <workflow-name>
    Ve složce <logic-app-name> se objeví složka <workflow-name>, když přidáte jednotkové testy pro pracovní postup.
    Tests
    || <logic-app-name>
    ||| <workflow-name>
    |||| MockOutputs
    |||||<operation-name-outputs>.cs
    Ve složce <workflow-name> se nachází složka MockOutputs, která obsahuje soubor C# (.cs) se silně typovanými třídami pro každou operaci konektoru v pracovním postupu. Každý název souboru .cs používá následující formát:

    < operation-name >[Trigger\|Action]Output.cs

    Pokud operace konektoru obsahuje dynamické kontrakty, zobrazí se pro každý dynamický typ třída. Dynamický typ odkazuje na parametr operace, který má různé vstupy a výstupy na základě hodnoty zadané pro tento parametr. Tyto třídy můžete použít k rozšíření jednotkových testů a vytvoření nových mocků od začátku.
    Tests
    || <logic-app-name>
    ||| <workflow-name>
    |||| <unit-test-name>
    ||||| <unit-test-name>.cs
    <workflow-name> Ve složce <unit-test-name> složka obsahuje <unit-test-name>.cs soubor. Tento soubor, který obsahuje ukázkovou třídu a metody jazyka C#, použijete ke spuštění a uplatnění výsledků. Tento soubor můžete upravit tak, aby odpovídal konkrétním testovacím scénářům.

Zkontrolujte soubor jednotkového testu *.cs

Tato třída pro jednotkové testování poskytuje architekturu pro testování standardních pracovních postupů v aplikaci Logic simulací triggerů a akcí. Tato třída umožňuje testovat pracovní postupy bez skutečného volání externích služeb nebo rozhraní API.

Struktura testovací třídy

Typická třída jednotkového testu používá následující strukturu.

[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.
}

Metoda Setup()

Tato metoda vytvoří instanci třídy TestExecutor pomocí cesty ke konfiguračnímu souboru nastavení testu. Metoda se spustí před každým spuštěním testu a vytvoří novou instanci TestExecutor.

[TestInitialize]
public void Setup()
{
    this.TestExecutor = new TestExecutor("<workflow-name>/testSettings.config");
}

Ukázkové testovací metody

Následující část popisuje ukázkové testovací metody, které můžete použít ve třídě jednotkových testů.

Test statických napodobených dat

Následující metoda ukazuje, jak pomocí statických napodobených dat otestovat pracovní postup. V této metodě můžete provést následující úlohy:

  • Nastavte hodnoty vlastností na mockovaných akcích.
  • Spusťte pracovní postup s nakonfigurovanými napodobenými daty.
  • Potvrďte, že spuštění proběhlo úspěšně.
[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);
}

Dynamický test simulovaných dat

Následující metoda ukazuje, jak používat dynamická napodobená data s metodami zpětného volání. Tento přístup nabízí dvě možnosti, které dynamicky generují napodobená data:

Oba přístupy umožňují vytvářet dynamické odpovědi na základě kontextu provádění testů jednotek.

[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);
}

Pomocné metody

Následující část popisuje metody používané vzorovými testovacími metodami. Pomocné metody se zobrazí pod testovacími metodami v definici třídy.

Metoda zpětného volání

Následující metoda dynamicky generuje napodobená data. Název metody se liší podle názvu napodobené akce v testovacích metodách pro statická nebo dynamická napodobená data. Tuto metodu můžete upravit tak, aby vracela různé napodobení odpovědí na základě požadavků na váš testovací scénář, nebo ji můžete použít jako šablonu k vytvoření vlastních metod zpětného volání.

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()

        }
    );
}