Megosztás a következőn keresztül:


Egységtesztek létrehozása standard munkafolyamat-definíciókból az Azure Logic Appsben a Visual Studio Code használatával

A következőkre vonatkozik: Azure Logic Apps (Standard)

Az egységtesztelés alapvető gyakorlat, amely megbízható és pontos marad az alkalmazás vagy a megoldás számára a szoftverfejlesztési életciklus során. Az egységtesztek segítségével hatékonyan és szisztematikusan ellenőrizheti a megoldás kulcsösszetevőit.

Standard logikaialkalmazás-munkafolyamatok esetén egységteszteket hozhat létre a Visual Studio Code és az Azure Logic Apps (Standard) bővítmény használatával. Ez a funkció lehetővé teszi, hogy munkafolyamat-definíciókkal egységteszteket hozzon létre, és a logikai alkalmazásmegoldás által támogatott forgatókönyvekhez szabja őket – mindezt anélkül, hogy külső szolgáltatásokhoz, rendszerekhez vagy API-khoz kellene csatlakoznia. Ez a módszer lehetővé teszi a munkafolyamatok tesztelését anélkül, hogy külső szolgáltatásokkal, rendszerekkel vagy API-kkal kellene együttműködnie, és a következő előnyöket nyújtja:

  • A munkafolyamat minőségének javítása a lehetséges problémák azonosításával és megoldásával, mielőtt üzembe helyeznénk más környezetekben.

  • Egyszerűsítheti az egységtesztek integrációját a fejlesztési folyamattal, miközben egységes és pontos munkafolyamat-viselkedést biztosít.

Ez az útmutató bemutatja, hogyan hozhat létre egységtesztdefiníciót egy munkafolyamatból. Ez a definíció az egyes munkafolyamat-műveletek külső hívásait szimulálja a munkafolyamat-logika módosítása nélkül. Amikor egységtesztet hoz létre egy munkafolyamathoz, egy egységtesztelési projektet kap, amely a következő mappákat tartalmazza:

  • Olyan mappa, amely erősen beírt osztályokat tartalmaz a munkafolyamat minden egyes szimulálható műveletéhez.

  • Egy mappa az egyes egységteszt-definíciókhoz. Ez a mappa tartalmaz egy C#-fájlt, amely mintaosztályt és metódusokat tartalmaz. Ezzel az osztályval és módszerekkel állíthatja be a saját állításait, ellenőrizheti, hogy a munkafolyamat a várt módon működik-e, és hogy a munkafolyamat megbízhatóan és kiszámíthatóan viselkedik-e a nagyobb Azure-ökoszisztémában.

Előfeltételek

Korlátozások és ismert problémák

  • Ez a kiadás jelenleg csak c#-t támogat egységtesztek létrehozásához.

  • Ez a kiadás nem támogatja a nem szimulált műveleteket. Győződjön meg arról, hogy a munkafolyamat végrehajtási útvonalának összes művelete szimulálva van.

  • Ez a kiadás nem támogatja a következő művelettípusokat:

    • Integrációs fiókműveletek
    • Az EDI kódolja és dekódolja a műveleteket

Az alapfogalmak áttekintése

Az alábbi lista alapszintű, de fontos fogalmakat tartalmaz a standard munkafolyamatok egységtesztjeivel kapcsolatban:

  • Logikai alkalmazásegység tesztelése

    Felügyelt munkafolyamat-végrehajtás, amely szimulált objektumokat injektál. Ezek az objektumok a munkafolyamat-eseményindítót vagy a külső szolgáltatásoktól vagy rendszerektől függő műveleteket jelölik.

  • Modellezhető művelet

    Külső szolgáltatástól vagy rendszertől függő munkafolyamat-művelet. Ezeket a műveleteket modellezett műveletekké alakíthatja az egységtesztek létrehozásához és végrehajtásához.

Egységteszt létrehozása munkafolyamat-definícióból

  1. Nyissa meg a Standard logikai alkalmazás projektet a Visual Studio Code-ban.

  2. Bontsa ki a munkafolyamat-definíció mappát a projektben.

  3. A workflow.json fájl helyi menüjében válassza a Tervező megnyitása lehetőséget.

  4. A tervező eszköztárán válassza az Egységteszt létrehozása lehetőséget.

    Képernyőkép a Visual Studio Code-ról, a Standard logikai alkalmazás projektről, a munkafolyamat-tervezőről és a kiválasztott parancsról az egységteszt létrehozásához.

  5. Adjon meg egy nevet az egységteszthez, az egységteszt osztályhoz és a C# fájlhoz.

    Ekkor megjelenik egy Tesztek nevű új mappa a projekt-munkaterületen. Ez a mappa a következő struktúrával rendelkezik:

    Képernyőkép a Visual Studio Code, a Standard logikai alkalmazás projekt és a Tesztek mappáról egységtesztelési mappákkal és fájlokkal.

    Mappa vagy fájl Leírás
    Tests
    || <logic-app-name>
    Tests A mappában megjelenik egy <logic-app-name> mappa, amikor egységteszteket ad hozzá egy logikai alkalmazásprojekthez.
    Tests
    || <logic-app-name>
    ||| <workflow-name>
    <logic-app-name> A mappában egy <workflow-name> mappa jelenik meg, amikor egységteszteket ad hozzá egy munkafolyamathoz.
    Tests
    || <logic-app-name>
    ||| <workflow-name>
    |||| MockOutputs
    |||||<operation-name-outputs>.cs
    <workflow-name> A mappában egy C# (MockOutputs) fájl található, amely erősen beírt osztályokat tartalmaz a munkafolyamat minden egyes összekötőműveletéhez. Minden .cs fájlnév a következő formátumot használja:

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

    Ha egy összekötő-művelet dinamikus szerződéssel rendelkezik, minden dinamikus típushoz megjelenik egy osztály. A dinamikus típus olyan műveleti paraméterre utal, amely különböző bemenetekkel és kimenetekkel rendelkezik az adott paraméterhez megadott érték alapján. Ezekkel az osztályokkal kibővítheti az egységteszteket, és új maketteket hozhat létre az alapoktól.
    Tests
    || <logic-app-name>
    ||| <workflow-name>
    |||| <unit-test-name>
    ||||| <unit-test-name>.cs
    A <workflow-name> mappában található a <unit-test-name> mappa, amely tartalmaz egy <unit-test-name>.cs fájlt. Ezt a fájlt használja, amely egy C# mintaosztályt és metódust tartalmaz az eredmények futtatásához és érvényesítéséhez. Ezt a fájlt úgy szerkesztheti, hogy megfeleljen az adott tesztforgatókönyveknek.

Az egységteszt *.cs fájljának áttekintése

Ez az egységtesztelő osztály keretrendszert biztosít a standard logikai alkalmazás munkafolyamatainak teszteléséhez triggerek és műveletek szimulálásával. Ez az osztály lehetővé teszi a munkafolyamatok tesztelését anélkül, hogy külső szolgáltatásokat vagy API-kat hívna meg.

Osztályszerkezet tesztelése

Egy tipikus egységtesztelő osztály a következő struktúrát használja:

[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() metódus

Ez a módszer a TestExecutor osztályt példányosítja a tesztbeállítási konfigurációs fájl elérési útjának megadásával. A metódus minden egyes tesztvégrehajtás előtt fut, és létrehoz egy új példányt.TestExecutor

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

Mintatesztelési módszerek

Az alábbi szakasz az egységteszt osztályban használható mintatesztelési módszereket ismerteti.

Statikus modell adattesztje

Az alábbi módszer azt mutatja be, hogyan használhat statikus mintaadatokat a munkafolyamat teszteléséhez. Ebben a módszerben a következő feladatokat hajthatja végre:

  • Állítsa be a tulajdonságértékeket a szimulált műveleteken.
  • Hajtsa végre a munkafolyamatot a konfigurált mintaadatokkal.
  • Győződjön meg arról, hogy a végrehajtás sikeres volt.
[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);
}

Dinamikus modell adattesztje

Az alábbi módszer bemutatja, hogyan használhat dinamikus modelladatokat visszahívási módszerekkel. Ez a megközelítés két lehetőséget kínál, amelyek dinamikusan hoznak létre mintaadatokat:

Mindkét módszer lehetővé teszi, hogy dinamikus válaszokat hozzon létre az egységtesztek végrehajtási környezete alapján.

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

Segédmetenek

A következő szakasz a mintatesztelési módszerek által használt módszereket ismerteti. A segédmetenek az osztálydefiníció tesztelési módszerei alatt jelennek meg.

Visszahívási módszer

Az alábbi módszer dinamikusan hoz létre mintaadatokat. A metódus neve a statikus vagy dinamikus mintaadatok tesztelési módszereiben szereplő szimulált műveletnévtől függően változik. Ezt a módszert úgy szerkesztheti, hogy a tesztforgatókönyv követelményei alapján különböző mintaválaszokat adjon vissza, vagy sablonként használhatja saját dinamikus visszahívási módszerek létrehozásához.

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

        }
    );
}