Share via


Minimum API uygulamalarında birim ve tümleştirme testleri

Tarafından Fiyaz Bin Hasan ve Rick Anderson

Tümleştirme testlerine giriş

Tümleştirme testleri, bir uygulamanın bileşenlerini birim testlerinden daha geniş bir düzeyde değerlendirir. Birim testleri, tek tek sınıf yöntemleri gibi yalıtılmış yazılım bileşenlerini test etmek için kullanılır. Tümleştirme testleri, iki veya daha fazla uygulama bileşeninin birlikte çalışarak beklenen bir sonuç elde ettiğini ve büyük olasılıkla bir isteği tam olarak işlemek için gereken her bileşenin de dahil olduğunu onaylar.

Bu daha geniş testler, genellikle aşağıdaki bileşenler de dahil olmak üzere uygulamanın altyapısını ve tüm çerçevesini test etmek için kullanılır:

  • Veritabanı
  • Dosya sistemi
  • Ağ gereçleri
  • İstek-yanıt işlem hattı

Birim testleri, altyapı bileşenleri yerine sahte veya sahte nesneler olarak bilinen fabrikatlanmış bileşenleri kullanır.

Birim testlerinin aksine tümleştirme testleri:

  • Uygulamanın üretimde kullandığı gerçek bileşenleri kullanın.
  • Daha fazla kod ve veri işleme gerektirir.
  • Çalıştırılması daha uzun sürer.

Bu nedenle, tümleştirme testlerinin kullanımını en önemli altyapı senaryolarıyla sınırlayın. Bir davranış birim testi veya tümleştirme testi kullanılarak test edilebiliyorsa birim testini seçin.

Tümleştirme testlerinin tartışmalarında, test edilen projeye genellikle Test Altındaki Sistem veya kısaca "SUT" adı verilir. "SUT" bu makalede test edilen ASP.NET Core uygulamasına başvurmak için kullanılır.

Veritabanları ve dosya sistemleriyle verilerin ve dosya erişiminin her permütasyonu için tümleştirme testleri yazmayın. Bir uygulama genelinde veritabanları ve dosya sistemleriyle kaç yerde etkileşim kurduğundan bağımsız olarak, odaklanmış bir dizi okuma, yazma, güncelleştirme ve silme tümleştirme testi genellikle veritabanı ve dosya sistemi bileşenlerini yeterince test edebilmektedir. Bu bileşenlerle etkileşim kuran yöntem mantığının rutin testleri için birim testlerini kullanın. Birim testlerinde, altyapı sahteleri veya sahteleri kullanımı test yürütmenin daha hızlı gerçekleşmesine neden olur.

ASP.NET Core tümleştirme testleri

ASP.NET Core'daki tümleştirme testleri aşağıdakileri gerektirir:

  • Testleri içermek ve yürütmek için bir test projesi kullanılır. Test projesinin SUT başvurusu vardır.
  • Test projesi SUT için bir test web konağı oluşturur ve SUT ile istekleri ve yanıtları işlemek için bir test sunucusu istemcisi kullanır.
  • Testleri yürütmek ve test sonuçlarını raporlamak için bir test çalıştırıcısı kullanılır.

Tümleştirme testleri, her zamanki Düzenleme, Eylem ve Onay testi adımlarını içeren bir dizi olayı izler:

  1. SUT'nin web konağı yapılandırıldı.
  2. Uygulamaya istek göndermek için bir test sunucusu istemcisi oluşturulur.
  3. Test düzenleme adımı yürütülür: Test uygulaması bir istek hazırlar.
  4. Eylem test adımı yürütülür: İstemci isteği gönderir ve yanıtı alır.
  5. Assert test adımı yürütülür: Gerçek yanıt, beklenen yanıta göre geçiş veya başarısız olarak doğrulanır.
  6. Tüm testler yürütülene kadar işlem devam eder.
  7. Test sonuçları bildirilir.

Genellikle test web konağı, test çalıştırmaları için uygulamanın normal web ana bilgisayarından farklı yapılandırılır. Örneğin, testler için farklı bir veritabanı veya farklı uygulama ayarları kullanılabilir.

Test web konağı ve bellek içi test sunucusu ()TestServer gibi altyapı bileşenleri Microsoft.AspNetCore.Mvc.Testing paketi tarafından sağlanır veya yönetilir. Bu paketin kullanımı test oluşturma ve yürütmeyi kolaylaştırır.

Paket Microsoft.AspNetCore.Mvc.Testing aşağıdaki görevleri işler:

Birim testleri belgelerinde bir test projesi ve test çalıştırıcısının nasıl ayarlanacağı ve testleri çalıştırma hakkında ayrıntılı yönergelerin yanı sıra testleri ve test sınıflarını adlandırmaya yönelik öneriler açıklanmaktadır.

Birim testlerini tümleştirme testlerinden farklı projelere ayırın. Testleri ayırma:

  • Altyapı testi bileşenlerinin birim testlerine yanlışlıkla dahil edilmesini sağlamaya yardımcı olur.
  • Hangi test kümesinin çalıştırıldığı üzerinde denetime izin verir.

GitHub'da örnek kod, Minimal API uygulamasında birim ve tümleştirme testlerine bir örnek sağlar.

IResult uygulama türleri

Ad alanında Microsoft.AspNetCore.Http.HttpResults genel IResult uygulama türleri, lambda yerine adlandırılmış yöntemler kullanılırken minimum yol işleyicilerini birim testi için kullanılabilir.

Aşağıdaki kod sınıfını NotFound<TValue> kullanır:

[Fact]
public async Task GetTodoReturnsNotFoundIfNotExists()
{
    // Arrange
    await using var context = new MockDb().CreateDbContext();

    // Act
    var result = await TodoEndpointsV1.GetTodo(1, context);

    //Assert
    Assert.IsType<Results<Ok<Todo>, NotFound>>(result);

    var notFoundResult = (NotFound) result.Result;

    Assert.NotNull(notFoundResult);
}

Aşağıdaki kod sınıfını Ok<TValue> kullanır:

[Fact]
public async Task GetTodoReturnsTodoFromDatabase()
{
    // Arrange
    await using var context = new MockDb().CreateDbContext();

    context.Todos.Add(new Todo
    {
        Id = 1,
        Title = "Test title",
        Description = "Test description",
        IsDone = false
    });

    await context.SaveChangesAsync();

    // Act
    var result = await TodoEndpointsV1.GetTodo(1, context);

    //Assert
    Assert.IsType<Results<Ok<Todo>, NotFound>>(result);

    var okResult = (Ok<Todo>)result.Result;

    Assert.NotNull(okResult.Value);
    Assert.Equal(1, okResult.Value.Id);
}

Ek Kaynaklar