Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
Azure-fiók és -előfizetés. Ha még nincs előfizetése, regisztráljon egy ingyenes Azure-fiókra.
Standard logikai alkalmazásprojekt a Visual Studio Code-ban, amely legalább egy munkafolyamat-definíciót tartalmaz egy egységteszt létrehozásához.
A Visual Studio Code beállításával és a projekt létrehozásával kapcsolatos további információkért tekintse meg a Standard logikai alkalmazás munkafolyamatainak létrehozása a Visual Studio Code-tal című témakört.
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
Nyissa meg a Standard logikai alkalmazás projektet a Visual Studio Code-ban.
Bontsa ki a munkafolyamat-definíció mappát a projektben.
A workflow.json fájl helyi menüjében válassza a Tervező megnyitása lehetőséget.
A tervező eszköztárán válassza az Egységteszt létrehozása lehetőséget.
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:
Mappa vagy fájl Leírás Tests
|| <logic-app-name>TestsA 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>.csA < workflow-name> mappában található a <unit-test-name> mappa, amely tartalmaz egy <unit-test-name>.csfá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:
- Adjon meg egy külön visszahívási módszert.
- Használjon beágyazott lambdafüggvényt.
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()
}
);
}