Minimum API uygulamalarında birim ve tümleştirme testleri
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
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:
- SUT'nin web konağı yapılandırıldı.
- Uygulamaya istek göndermek için bir test sunucusu istemcisi oluşturulur.
- Test düzenleme adımı yürütülür: Test uygulaması bir istek hazırlar.
- Eylem test adımı yürütülür: İstemci isteği gönderir ve yanıtı alır.
- 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.
- Tüm testler yürütülene kadar işlem devam eder.
- 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:
- Bağımlılık dosyasını (
.deps
) SUT'den test projesininbin
dizinine kopyalar. - testler yürütürken statik dosyaların ve sayfaların/görünümlerin bulunması için içerik kökünü SUT'nin proje köküne ayarlar.
- ile
TestServer
SUT önyüklemesini kolaylaştırmak için WebApplicationFactory sınıfını sağlar.
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
- Temel kimlik doğrulama testleri bir .NET deposu değildir, ancak .NET ekibinin bir üyesi tarafından yazılmıştır. Temel kimlik doğrulama testi örnekleri sağlar.
- Örnek kodu görüntüleme veya indirme
- Minimum API'lerde kimlik doğrulaması ve yetkilendirme
- Web API'lerinin hatalarını ayıklamak için Visual Studio bağlantı noktası tünelini kullanma
- ASP.NET Core'da test denetleyicisi mantığı
- ASP.NET Core'da Razor Pages birim testleri
ASP.NET Core