Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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 daha önce yürütülen iş akışı çalıştırmalarını kullanmanıza olanak tanır. Bu yaklaşım aşağıdaki avantajları sağlar:
İş akışı çalıştırmalarını yeniden kullanarak iş akışındaki belirli işlemler için sahte veriler oluşturun.
Bu veriler dış hizmetleri, sistemleri veya API'leri çağırmak zorunda kalmadan iş akışlarını test etmenizi sağlar. Zaman kazanırsınız ve iş akışınız gerçek iş akışı yürütme senaryosuyla uyumlu kalır.
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ışı çalıştırması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ışı çalıştırmasından birim testi oluşturduğunuzda, iki klasör içeren bir birim testi projesi alırsınız:
İş akışınızdaki her taklit edilebilir işlem için güçlü şekilde tiplenmiş sınıflar içeren bir klasör.
Her birim testi tanımı için aşağıdaki dosyaları içeren bir klasör:
İş akışınızda oluşturulan simüle edilmiş işlemleri temsil eden bir JSON dosyası.
Kendi onaylarınızı ayarlamak için kullandığınız örnek sınıf ve yöntemleri içeren bir C# dosyası, iş akışının beklendiği gibi davrandığını onaylayın ve iş akışının daha büyük Azure ekosisteminizde güvenilir ve tahmin edilebilir şekilde davrandığından emin olun.
Önkoşullar
Bir Azure hesabı ve aboneliği Aboneliğiniz yoksa, ücretsiz bir Azure hesabı için kaydolun.
Visual Studio Code'da birim testi oluşturmak için kullanılacak en az bir önceden ve yerel olarak yürütülen iş akışını içeren Standart mantıksal uygulama projesi.
Visual Studio Code kurulumu ve proje oluşturma hakkında daha fazla bilgi için bkz. Visual Studio Code ile Standart mantıksal uygulama iş akışları oluşturma.
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
- Veri Eşleyici eylemleri
- Özel kod eylemleri
- XML eylemleri
- Sıvı 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ışı yürütmesinden birim testi oluştur
Visual Studio Code'da Standart mantıksal uygulama projenizi açın.
Visual Studio Code araç çubuğunda, Çalıştırmenüsünden Hata Ayıklamayı Başlat'ı seçin. (Klavye: F5 tuşuna basın)
Gezgin penceresine dönün. Projenizde iş akışı tanımı klasörünü genişletin.
workflow.json kısayol menüsünü açın ve Genel Bakış'ı seçin.
Genel bakış sayfasında, Çalıştırma geçmişi bölümünün altında, birim testi oluşturmak için kullanılacak iş akışı çalışmasını seçin.
Çalıştırma geçmişi araç çubuğunda Çalıştırmadan birim testi oluştur'u seçin.
Birim testi, birim testi sınıfı ve C# dosyası için kullanılacak bir ad sağlayın.
Gezgin penceresinde, mantıksal uygulama proje klasörünüzün altında Testler adlı yeni bir proje klasörü görüntülenir. Testler klasörü aşağıdaki klasörleri ve dosyaları içerir:
Klasör veya dosya Açıklama Tests
|| <logic-app-name>Testsklasö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ışındakiMockOutputsher bağlayıcı işlemi için kesin olarak türlenmiş 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>-mock.json
||||| <unit-test-name>.cs< workflow-name> klasöründe, <unit-test-name> klasör aşağıdaki dosyaları içerir:
- Dosya, <unit-test-name>-mock.jsonbirim testini oluşturan iş akışı çalıştırmasına göre oluşturulan sahteler için bir JSON gösterimi içerir.
- Dosya <unit-test-name>.cs, sonuçları çalıştırmak ve onaylamak için dosyayı kullanan*-mock.jsonörnek bir C# sınıfı ve yöntemleri içerir. Bu dosyayı belirli test senaryolarınızla eşleşecek şekilde düzenleyebilirsiniz.
*-mock.json dosyasını gözden geçirin
Bu dosya aşağıdaki ana bölümlere sahiptir:
triggerMocks bölüm
triggerMocks bölümü, iş akışı tetikleyicisinden elde edilen sahte sonucu içerir. Bu bölüm, aşağıdaki örnekte gösterildiği gibi iş akışı yürütmeyi başlatmak için gereklidir:
{
"triggerMocks": {
"When_messages_are_available_in_a_queue_(peek-lock)": {
"name": "When_messages_are_available_in_a_queue_(peek-lock)",
"status": "Succeeded",
"outputs": {
"body": {
"contentData": {
"messageId": "1234",
"status": "new",
"contentType": "application/json",
"userProperties": {},
"scheduledEnqueueTimeUtc": "1/1/0001 12:00:00 AM",
"timeToLive": "14.00:00:00",
"deliveryCount": 1,
"enqueuedSequenceNumber": 0,
"enqueuedTimeUtc": "2025-04-07T01:10:09.738Z",
"lockedUntilUtc": "2025-04-07T01:11:09.769Z",
"lockToken": "78232fa8-03cf-4baf-b1db-3375a64e0ced",
"sequenceNumber": 5
}
}
}
}
},
"actionMocks": {...}
}
actionMocks bölüm
Bir iş akışı çalıştırılırken, actionMocks bölümü her sahte eylemi içerir ve iş akışının denetimli bir şekilde yürütülmesini garanti eder.
{
"triggerMocks": {...},
"actionMocks": {
"Call_External_API": {
"name": "Call_External_API",
"status": "Succeeded",
"outputs": {
"statusCode": 200,
"body": {
"status": "Awesome!"
}
}
},
"CompleteMessage": {
"name": "CompleteMessage",
"status": "Succeeded",
"outputs": {
"statusCode": "OK",
"body": {}
}
}
}
}
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 action and trigger data.
var mockData = this.GetTestMockDefinition();
var sampleActionMock = mockData.ActionMocks["Call_External_API"];
sampleActionMock.Outputs["your-property-name"] = "your-property-value";
// ACT: Create the UnitTestExecutor instance. Run the workflow with mock data.
var testRun = await this.TestExecutor
.Create()
.RunWorkflowAsync(testMock: mockData).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);
}
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:
- Ayrı bir geri çağırma yöntemi tanımlayın.
- Satır içi lambda işlevi kullanın.
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 action and trigger data.
var mockData = this.GetTestMockDefinition();
// OPTION 1: Define a callback class.
mockData.ActionMocks["Call_External_API"] = new CallExternalAPIActionMock(
name: "Call_External_API",
onGetActionMock: CallExternalAPIActionMockOutputCallback);
// OPTION 2: Define an inline lambda function.
mockData.ActionMocks["Call_External_API"] = 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 UnitTestExecutor instance. Run the workflow with mock data.
var testRun = await this.TestExecutor
.Create()
.RunWorkflowAsync(testMock: mockData).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);
}
Hata senaryosu testi
Aşağıdaki yöntem hata koşullarının nasıl test yapılacağını gösterir. Bu yöntemde aşağıdaki görevleri tamamlayabilirsiniz:
- Sahte eylemleri belirli hata kodları ve iletilerle başarısız olacak şekilde yapılandırın.
- İş akışının bu hata koşullarını doğru işlediğini onaylayın.
[TestMethod]
public async Task <workflow-name>_<unit-test-name>_ExecuteWorkflow_FAILED_Sample3()
{
// PREPARE: Generate mock action and trigger data.
var mockData = this.GetTestMockDefinition();
var mockError = new TestErrorInfo(code: ErrorResponseCode.BadRequest, message: "Input is invalid.");
mockData.ActionMocks["Call_External_API"] = new CallExternalAPIActionMock(
status: TestWorkflowStatus.Failed,
error: mockError);
// ACT: Create UnitTestExecutor instance. Run the workflow with mock data.
var testRun = await this.TestExecutor
.Create()
.RunWorkflowAsync(testMock: mockData).ConfigureAwait(continueOnCapturedContext: false);
// ASSERT: Confirm successful workflow execution and that the status is 'Succeeded'.
Assert.IsNotNull(value: testRun);
Assert.AreEqual(expected: TestWorkflowStatus.Failed, 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.
GetTestMockDefinition()
Aşağıdaki yöntem bir JSON dosyasından sahte tanımı yükler. Sahte verileriniz farklı bir konumda veya biçimde depolanıyorsa bu yöntemi düzenleyebilirsiniz.
private TestMockDefinition GetTestMockDefinition()
{
var mockDataPath = Path.Combine(TestExecutor.rootDirectory, "Tests", TestExecutor.logicAppName,
TestExecutor.workflow, "<unit-test-name>", "<unit-test-name>-mock.json");
return JsonConvert.DeserializeObject<TestMockDefinition>(File.ReadAllText(mockDataPath));
}
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()
}
);
}