Aracılığıyla paylaş


Visual Studio Code ile Azure Logic Apps'te Standart iş akışı tanımlarından birim testleri oluşturma

Şunlar için geçerlidir: Azure Logic Apps (Standart)

Birim testi, uygulamanızın veya çözümünüzün yazılım geliştirme yaşam döngüsü boyunca güvenilir ve doğru kalmasını sağlayan temel bir uygulamadır. Birim testleri, çözümünüzdeki temel bileşenleri verimli ve sistematik olarak doğrulamanıza yardımcı olur.

Standart mantıksal uygulama iş akışları için Visual Studio Code ve Azure Logic Apps (Standart) uzantısını kullanarak birim testleri oluşturabilirsiniz. Bu özellik, birim testleri oluşturmak ve bunları mantıksal uygulama çözümünüz tarafından desteklenen senaryolara uyarlamak için iş akışı tanımlarını kullanmanıza olanak tanır. Bunların tümü dış hizmetlere, sistemlere veya API'lere bağlanmaya gerek kalmadan kullanılabilecek. Bu yaklaşım, dış hizmetler, sistemler veya API'lerle etkileşime geçmek zorunda kalmadan iş akışlarınızı test etmenizi sağlar ve aşağıdaki avantajları sağlar:

  • Diğer ortamlara dağıtmadan önce olası sorunları tanımlayıp gidererek iş akışı kalitesini geliştirin.

  • Geliştirme sürecinizle birim testi entegrasyonunu kolaylaştırırken, tutarlı ve doğru iş akışı davranışı sağladığınızdan emin olun.

Bu kılavuz, bir iş akışından birim testi tanımının nasıl oluşturulacağını gösterir. Bu tanım, iş akışı mantığını değiştirmeden her iş akışı işleminden gelen dış çağrılarla dalga geçer. bir iş akışı için birim testi oluşturduğunuzda, aşağıdaki klasörleri içeren bir birim testi projesi alırsınız:

  • İş akışınızdaki her taklit edilebilir işlem için kesin belirlenmiş sınıflar içeren bir klasör.

  • Her birim testi tanımı için bir klasör. Bu klasör, örnek bir sınıf ve yöntemler içeren bir C# dosyası içerir. Kendi onaylarınızı ayarlamak, iş akışının beklendiği gibi davrandığını onaylamak ve iş akışının daha büyük Azure ekosisteminizde güvenilir ve tahmin edilebilir şekilde davrandığından emin olmak için bu sınıfı ve yöntemleri kullanırsınız.

Önkoşullar

Sınırlamalar ve bilinen sorunlar

  • Bu sürüm şu anda birim testleri oluşturmak için yalnızca C# desteği sunar.

  • Bu sürüm sahte olmayan eylemleri desteklemez. İş akışı yürütme yolundaki tüm eylemlerin taklit edildiğinden emin olun.

  • Bu sürüm aşağıdaki eylem türlerini desteklemez:

    • Tümleştirme hesabı eylemleri
    • EDI kodlama ve kod çözme eylemleri

Temel kavramları gözden geçirin

Aşağıdaki liste, Standart iş akışları için birim testleri hakkında temel ama önemli kavramları içerir:

  • Mantıksal uygulama birim testi

    Sahte nesneler ekleyen denetimli bir iş akışı yürütmesi. Bu nesneler iş akışı tetikleyicisini veya dış hizmetlere veya sistemlere bağlı eylemleri temsil eder.

  • Taklit edilebilir eylem

    Dış hizmete veya sisteme bağlı bir iş akışı eylemi. Birim testi oluşturma ve yürütme için bu eylemleri taklit eylemlere dönüştürebilirsiniz.

İş akışı tanımından birim testi oluşturma

  1. Visual Studio Code'da Standart mantıksal uygulama projenizi açın.

  2. Projenizde iş akışı tanımı klasörünü genişletin.

  3. workflow.json dosyasının kısayol menüsünde Tasarımcıyı Aç'ı seçin.

  4. Tasarımcı araç çubuğunda Birim testi oluştur'u seçin.

    Visual Studio Code, Standart mantıksal uygulama projesi, iş akışı tasarımcısı ve birim testi oluşturmak için seçilen komutu gösteren ekran görüntüsü.

  5. Birim testi, birim testi sınıfı ve C# dosyası için kullanılacak bir ad sağlayın.

    Artık proje çalışma alanınızda Testler adlı yeni bir klasör görünür. Bu klasör aşağıdaki yapıya sahiptir:

    Visual Studio Code, Standart mantıksal uygulama projesi ve Birim testi klasörleri ve dosyaları içeren Testler klasörünü gösteren ekran görüntüsü.

    Klasör veya dosya Açıklama
    Tests
    || <logic-app-name>
    Tests klasöründe, mantıksal <logic-app-name> uygulama projesine birim testleri eklediğinizde bir klasör görüntülenir.
    Tests
    || <logic-app-name>
    ||| <workflow-name>
    <logic-app-name> klasöründe, bir <workflow-name> iş akışı için birim testleri eklediğinizde bir klasör görüntülenir.
    Tests
    || <logic-app-name>
    ||| <workflow-name>
    |||| MockOutputs
    < operation-name-outputs >|||||.cs
    <workflow-name> klasöründe, klasör iş akışındaki MockOutputs her bağlayıcı işlemi için kesin olarak yazılan sınıflara sahip bir C# (.cs) dosyası içerir. Her .cs dosya adı aşağıdaki biçimi kullanır:

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

    Bağlayıcı işleminin dinamik anlaşmaları varsa, her dinamik tür için bir sınıf görüntülenir. Dinamik tür, bu parametre için sağlanan değere göre farklı girişlere ve çıkışlara sahip bir işlem parametresine başvurur. Birim testlerinizi genişletmek ve sıfırdan yeni taklit nesneler oluşturmak için bu sınıfları kullanabilirsiniz.
    Tests
    || <logic-app-name>
    ||| <workflow-name>
    |||| <unit-test-name>
    ||||| <unit-test-name>.cs
    <workflow-name> klasöründe, <unit-test-name> klasörü bir <unit-test-name>.cs dosyası içerir. Sonuçları çalıştırmak ve onaylamak için örnek bir C# sınıfı ve yöntemleri içeren bu dosyayı kullanırsınız. Bu dosyayı belirli test senaryolarınızla eşleşecek şekilde düzenleyebilirsiniz.

Birim testi *.cs dosyasını gözden geçirin

Bu birim testi sınıfı, tetikleyicileri ve eylemleri taklit ederek Standart mantıksal uygulama iş akışlarını test etme için bir çerçeve sağlar. Bu sınıf, dış hizmetleri veya API'leri çağırmadan iş akışlarını test etmenizi sağlar.

Test sınıfı yapısı

Tipik bir birim testi sınıfı aşağıdaki yapıyı kullanır:

[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() yöntemi

Bu yöntem, test ayarları yapılandırma dosyanızın yolunu kullanarak sınıfın örneğini TestExecutor oluşturur. yöntemi her test yürütmeden önce çalışır ve yeni bir örneği TestExecutoroluşturur.

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

Örnek test yöntemleri

Aşağıdaki bölümde, birim testi sınıfınızda kullanabileceğiniz örnek test yöntemleri açıklanmaktadır.

Statik sahte veri testi

Aşağıdaki yöntem, iş akışınızı test etmek için statik sahte verilerin nasıl kullanılacağını gösterir. Bu yöntemde aşağıdaki görevleri tamamlayabilirsiniz:

  • Mock edilmiş eylemlerinizde özellik değerlerini ayarlayın.
  • Yapılandırılmış sahte verilerle iş akışını çalıştırın.
  • Yürütmenin başarılı olduğunu onaylayı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);
}

Dinamik sahte veri testi

Aşağıdaki yöntem, geri çağırma yöntemleriyle dinamik sahte verilerin nasıl kullanılacağını gösterir. Bu yaklaşım, dinamik olarak sahte veri oluşturan iki seçenek sunar:

Her iki yaklaşım da birim testi yürütme bağlamı temelinde dinamik yanıtlar oluşturmanıza olanak tanır.

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

Yardımcı yöntemler

Aşağıdaki bölümde, örnek test yöntemleri tarafından kullanılan yöntemler açıklanmaktadır. Yardımcı yöntemler, sınıf tanımındaki test yöntemlerinin altında görünür.

Geri çağırma yöntemi

Aşağıdaki yöntem dinamik olarak sahte veriler oluşturur. Yöntem adı, statik ya da dinamik mock veriler için test yöntemlerinde simüle edilen eylem adı temel alınarak değişir. Test senaryosu gereksinimlerinize göre farklı sahte yanıtlar döndürmek için bu yöntemi düzenleyebilir veya kendi dinamik geri çağırma yöntemlerinizi oluşturmak için şablon olarak kullanabilirsiniz.

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

        }
    );
}