İçeriğe atla
Şimdi yükleniyor
AKAşkın KILIÇ
  • Anasayfa
  • Azure & Bulut
    • Microsoft Azure
    • Bulut Altyapı
    • Microsoft 365
  • Yazılım
    • DevOps
    • Geliştirici Araçları
    • Konteyner & K8s
  • AI & Veri
    • Yapay Zeka
    • Veri & Analitik
  • Güvenlik
    • Güvenlik & Kimlik
    • Kurumsal Teknoloji
  • Hakkımda
    • İletişim
×
  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka
  • Başlangıç
  • DevOps
  • MSTest 4.4 ile Native AOT Uygulamalarını Test Etmek
DevOps Geliştirici Araçları Microsoft Azure dotnet publish, MSTest, Native AOT, System.Text.Json Aşkın KILIÇ 07/09/2026 4 Yorumlar

MSTest 4.4 ile Native AOT Uygulamalarını Test Etmek

MSTest 4.4 ile Native AOT Uygulamalarını Test Etmek
📑 İçindekiler
  1. Yönetilen testler dağıtım sorunlarını gizleyebilir
  2. MSTest Native AOT test yürütülebilirini nasıl oluşturuyor?
  3. Bir MSTest projesini Native AOT için yapılandırma
  4. Yönetilen ve Native AOT test katmanlarını birlikte çalıştırın
  5. Native AOT yolundaki sınırlar
  6. Performans değil, dağıtım benzerliği öncelikli
  7. İlgili İçerikler
  8. Kaynaklar ve İleri Okuma

⏱️ 5 dk okuma📅 7 Eylül 2026

Native AOT ile yayımlanan bir uygulamada yönetilen ortamda başarılı olan testler, dağıtım sırasında çıkabilecek her sorunu göstermeyebilir. MSTest 4.4 ile test projeleri Native AOT yürütülebilirleri olarak yayımlanıp çalıştırılabilir. Böylece testler, uygulamanın yayımlanacağı derleme ve çalışma modeline daha yakın bir ortamda doğrulanır.

İlgili içerik: MSTest 4.5 ile UWP ve WinUI 3'te UI Thread Testleri

Yönetilen testler dağıtım sorunlarını gizleyebilir

Native AOT, uygulamayı önceden derler, kullanılmayan kodları kaldırır ve çalışma zamanında kod üretimiyle sınırsız yansıma kullanımına alternatifler gerektirir. Bu yüzden yönetilen test sürecinde kullanılan kodun davranışıyla Native AOT olarak yayımlanan uygulamanın davranışı farklı olabilir.

Örneğin aşağıdaki test, System.Text.Json ile bir makbuz nesnesini JSON’a dönüştürüyor:

[TestClass]
public class ReceiptFormatterTests
{
[TestMethod]
public void ReceiptIsSerialized()
{
var json = JsonSerializer.Serialize(new Receipt(42));
StringAssert.Contains(json, "\"Total\":42");
}
}
public sealed record Receipt(decimal Total);

Test normal yönetilen çalıştırmada başarılı olabilir; System.Text.Json türü yansıma yoluyla keşfedebilir. Ancak kırpılmış veya Native AOT olarak yayımlanmış bir uygulamada yansıma tabanlı serileştirme varsayılan olarak devre dışıdır. Aynı kod şu hatayı üretebilir:

System.InvalidOperationException:
Reflection-based serialization has been disabled for this application.

Bu hata test altyapısında değil, uygulamanın dağıtım modelinde bir sorun olduğunu gösterir. Uygulama tarafında JSON meta verileri kaynak üretimiyle sağlanabilir:

[JsonSerializable(typeof(Receipt))]
internal partial class AppJsonContext : JsonSerializerContext
{
}
var json = JsonSerializer.Serialize(
new Receipt(42),
AppJsonContext.Default.Receipt);

System.Text.Json kaynak üretimi, serileştirmede kullanılabilecek üretim modlarını ve davranışı açıklar. Serileştirme bunun yalnızca bir örneği. Native AOT testi, desteklenmeyen çalışma zamanı kod üretimini, eksik yansıma meta verilerini ve uyumsuz bağımlılıkları da ortaya çıkarabilir.

Burada iki ayrı sorumluluk vardır: MSTest kaynak üretimi, testlerin kırpma sonrasında keşfedilip çalıştırılmasını sağlar; JSON kaynak üretimi ise testin kullandığı uygulama yolunu Native AOT ile uyumlu hale getirir. MSTest uygulamadaki sorunu gizlemez, yerel test sürecinin bu sorunu dağıtımdan önce göstermesine yardımcı olur.

MSTest Native AOT test yürütülebilirini nasıl oluşturuyor?

MSTest’in ilk Native AOT önizlemesi Nisan 2024’te yayımlandı. Bu çalışma, bir MSTest projesinin yerel bir yürütülebilir dosyaya dönüştürülebileceğini gösterdi; ancak deneysel test motorunun ve kaynak üreticisinin kapsamı sınırlıydı.

MSTest 4.4 ile kaynak üretimi MSTest araç zincirine ekleniyor. Derleme sırasında kaynak üreticisi şunları oluşturuyor:

  • Derlemedeki test sınıflarının kaydı
  • Desteklenen test üyelerine ait öznitelik bilgileri
  • Test sınıflarını oluşturan ve test metotlarını çağıran temsilciler
  • Kırpma sırasında keşfedilen test sınıflarını ve desteklenen temel sınıfları koruyan başvurular

Buradaki temel kazanım, üretilen koddan çok testlerin varlığının ve nasıl çalıştırılacağının kırpma işleminden önce kaydedilmesidir. Test sınıfları ve metotları yine normal [TestClass] ve [TestMethod] kodu olarak yazılır. Kaynak üretimi programlama modelini değil, derleme ve çalıştırma yolunu değiştirir.

Bir MSTest projesini Native AOT için yapılandırma

Temel proje yapılandırması için küçük bir değişiklik yeterlidir:

<Project Sdk="MSTest.Sdk/4.4.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<PublishAot>true</PublishAot>
</PropertyGroup>
<!-- Keep your existing ItemGroup elements and project references. -->
</Project>

MSTest.Sdk, varsayılan olarak Microsoft Testing Platform’u kullanır. PublishAot özelliği etkinleştirildiğinde MSTest kaynak üretimi ve yerel yürütülebilir dosya yolu açılır.

VSTest kullanan projelerin Microsoft Testing Platform’a geçiş kılavuzuna bakması gerekir. Komut satırı bağımsız değişkenleri, CI entegrasyonu ve desteklenen .runsettings girdileri farklı olabilir.

Test projesi, uygulamanın yayımlanacağı işletim sistemi ve mimariyle aynı hedef için yayımlanmalıdır:

dotnet publish./MyProject.Tests/MyProject.Tests.csproj \
-c Release -r linux-x64 -o./artifacts/native-tests
./artifacts/native-tests/MyProject.Tests

Bu örnekte linux-x64 çalışma zamanı tanımlayıcısı kullanılıyor. Dağıtım hedefinize göre win-x64 veya osx-arm64 gibi uygun RID değerini seçin. Windows üzerinde oluşturulan yürütülebilir dosya MyProject.Tests.exe olarak çalıştırılır. Proje yolunu da kullandığınız test projesine göre değiştirmeniz gerekir.

Yönetilen ve Native AOT test katmanlarını birlikte çalıştırın

Yönetilen testler hızlı geliştirme geri bildirimi sağlar. Native AOT test katmanı ise uygulamanın dağıtım modelini kontrol eder. İki süreç farklı sorulara yanıt verdiğinden birlikte kullanıldıklarında daha anlamlı bir sonuç verir.

CI sürecinde önce tek bir temsili test projesiyle başlanabilir:

  • Mevcut yönetilen test çalıştırmasını koruyun.
  • Temsili bir test projesini Native AOT olarak yayımlayıp çalıştırın.
  • Her iki katmanın da beklenen test sayısını ve sonuçlarını aynı şekilde keşfettiğini doğrulayın.
  • Native AOT yayımlama ve çalıştırma süresini test yürütme süresinden ayrı kaydedin.
  • Ek güven CI maliyetini haklı çıkarıyorsa kapsamı genişletin.

Bu çalışmaya zamanlanmış bir işte veya sürüm doğrulama sürecinde başlanabilir. Native AOT hattının geri bildirim değeri ve yayımlama süresi uygunsa hat her pull request’e taşınabilir.

Temsili proje; serileştirme, bağımlılık ekleme, yapılandırma bağlama, yansıma tabanlı eklentiler veya Native AOT desteğinin doğrulanması gereken bir bağımlılık gibi dağıtıma duyarlı yolları içermelidir. Yalnızca aritmetik işlemleri test eden bir proje çalıştırıcının işlediğini gösterebilir, ancak yayımlanan uygulama hakkında sınırlı bilgi verir.

Test sayılarının eşleşmesi bir sürüm kapısı olarak kullanılmalıdır. Bir test sınıfı oluşturulan kayda giremediğinde kayıtlı alt küme başarılı olabilir ve süreç yine de başarıyla tamamlanabilir. Bu durum, sınıfın yalnızca [TestClass] sınıfından kalıtım alması, erişilemez veya dosyaya özel olması, statik ya da açık generic bir tür olması gibi nedenlerle ortaya çıkabilir. İlgili tanıların yok sayılması veya bastırılması da test sayısı farkını gizleyebilir.

Native AOT yolundaki sınırlar

Kaynak üretimi sıfır yansıma anlamına gelmez. Varsayılan ReflectionFree modu, desteklenen oluşturma ve çağırma işlemleri için üretilmiş öznitelikleri ve temsilcileri kullanır; ancak bazı işlemlerde yansıma tabanlı geri dönüş yolları bulunabilir.

Uyumluluğu incelemek için aşağıdaki yapılandırma kullanılabilir:

<PropertyGroup>
<MSTestSourceGenMode>Rooting</MSTestSourceGenMode>
</PropertyGroup>

Rooting modu keşfedilen test üyelerini korur, ancak yürütme sırasında yansıma kullanır.

Başlıca geçiş sınırlamaları şunlardır:

  • [TestClass] sınıfından yalnızca kalıtım alan sınıflar için öznitelik doğrudan bildirilmelidir. MSTEST0069 tanısı bu yapıyı belirler.
  • Test sınıfı erişilebilir, somut ve statik olmayan kapalı bir tür olmalıdır. Soyut temel fikstürler, somut bir türetilmiş test sınıfı üzerinden desteklenmeye devam eder.
  • Generic test metotları ile ref, out veya in parametreleri kullanan metotlar desteklenen bir imzaya taşınmalıdır.
  • [AssemblyFixtureProvider] kullanan projeler, Native AOT çalıştırmasına güvenmeden önce desteklenen bir fikstür modeline geçmelidir.
  • Bazı MSTest SDK entegrasyonları, Microsoft Testing Platform uzantıları ve CI raporlayıcıları Native AOT yolunda kullanılamayabilir. TRX ve Code Coverage desteklenmeye devam eder.

Derleyici ve analizör tanıları bastırılacak uyarılar olarak değil, geçiş kapıları olarak ele alınmalıdır. Güncel destek kapsamı için MSTest SDK belgelerine bakılmalıdır.

Performans değil, dağıtım benzerliği öncelikli

Kaynak üretimi, tüm derlemede Assembly.GetTypes() taramasını ve desteklenen testler için yansıma tabanlı oluşturma ve çağırma işlemlerini önleyebilir. Bu, başlangıç ve keşif çalışmalarını azaltabilir; ancak uçtan uca çalışmanın kesin olarak hızlanacağı anlamına gelmez. Toplam süreyi test yürütme, süreç başlangıcı, yayımlama ve kalan yansıma işlemleri belirleyebilir.

Bu nedenle performans, Native AOT altında test çalıştırmanın temel gerekçesi değildir. Buradaki değer, testin ve uygulamanın aynı kırpma ve önceden derleme modelini kullanmasıdır. Native AOT testleri son uygulama paketinin uçtan uca üretim doğrulamasının yerini almaz; yapılandırma, işletim sistemi, mimari, dış servisler ve paketleme yine farklı olabilir.

En uygun başlangıç, Native AOT ile yayımlanan kod yollarını kullanan tek bir projedir. Ortaya çıkan dağıtıma özgü hata, test sayısı uyuşmazlığı veya sorunsuz yerel çalıştırma, bu hattın ek güven sağlayıp sağlamadığını değerlendirmeye yardımcı olur. Sonrasında kapsam genişletilebilir, yaklaşım iyileştirilebilir veya pilot durdurulabilir.

İlgili İçerikler

  • Node.js Addon’larını.NET Native AOT ile Yazmak
  • Azure Cosmos DB vNext Emulator: Yerelde Gerçek Gibi Test Etmek
  • Visual Studio Debugger Agent’a Test Odaklı İnceleme Geliyor

Kaynaklar ve İleri Okuma

  • devblogs.microsoft.com
  • MSTest kaynak üretimi ve Native AOT testi
  • .NET Native AOT dağıtımı
  • Kendi içinde çalışan uygulamaları kırpma
  • System.Text.Json kaynak üretimi
  • Native AOT.NET uygulamalarını test etme
  • VSTest’ten Microsoft Testing Platform’a geçiş
  • MSTEST0069 analizörü
  • MSTest SDK belgeleri
🤖Bu yazı yapay zeka (büyük dil modelleri) ile hazırlanmış, insan editör tarafından incelenmiştir. İçerik üretim sürecimiz.
Aşkın KILIÇ
Aşkın KILIÇYazar

20+ yıl deneyimli Azure Solutions Architect. Microsoft sertifikalı bulut mimari ve DevOps danışmanı. Azure, yapay zekâ ve bulut teknolojileri üzerine Türkçe teknik içerikler üretiyor.

AZ-305AZ-104AZ-500AZ-400DP-203AI-102

İlgili Yazılar

CI/CD Pipeline'ından Cosmos DB'ye Secret'sız Erişim
CI/CD Pipeline'ından Cosmos DB'ye Secret'sız Erişim29 Ağu 2026
Claude Opus 4.8 GitHub Copilot'ta: Özellikler ve Geçiş
Claude Opus 4.8 GitHub Copilot'ta: Özellikler ve Geçiş28 May 2026
Foundry Toolboxes: Ajan Araçlarını Toplamak Neden Şart Oldu?
Foundry Toolboxes: Ajan Araçlarını Toplamak Neden Şart Oldu?10 May 2026
Pure Virtual C++ 2026: AI-Native C++ Geliştirici Akışı Geliyor
Pure Virtual C++ 2026: AI-Native C++ Geliştirici Akışı Geliyor14 Tem 2026

Bu içerik işinize yaradı mı?

Benzer içerikleri kaçırmamak için YouTube ve GitHub hesaplarımı takip edin.

YouTube GitHub

Haftalık Bülten

Her pazar özenle seçilmiş teknoloji yazıları doğrudan e-postanıza gelsin.

Etiket dotnet publish MSTest Native AOT System.Text.Json
Önceki yazı

Multiple trusted publishing configurations for npm

Sonraki yazı

GPT-6 Astra Microsoft Foundry’de Genel Kullanıma Açıldı

İlginizi Çekebilir

Microsoft Sovereign Cloud: İş Yükü Bazlı Kontrol Katmanı
Aşkın KILIÇ 0

Microsoft Sovereign Cloud: İş Yükü Bazlı Kontrol Katmanı

24/10/2026
PowerToys 0.102: Yeni Fare Araçları ve CLI Desteği
Aşkın KILIÇ 0

PowerToys 0.102: Yeni Fare Araçları ve CLI Desteği

24/10/2026
Code with Cosmos: Dört Bölümde Üretime Hazır AI Uygulaması
Aşkın KILIÇ 0

Code with Cosmos: Dört Bölümde Üretime Hazır AI Uygulaması

24/10/2026

4 comments

comments user
Barış U. 07/09/2026 06:08

Native AOT tarafını test akışına bu kadar erken dahil etmek bence büyük avantaj; yansıma/derleme kırpması sürprizini yayım aşamasına bırakmamak güzel fikir. Benzer şekilde testlerimde “yerel çalışıyor ama paketlenince bozuluyor” senaryoları yaşamıştım, bu yöntem tam o hataları erkenden yakalar. Sizce CI tarafında native AOT testlerini koşmak için en pratik kurulum ne olur?

Yanıtla
comments user
Kaan T. 07/09/2026 11:54

Native AOT tarafında testleri zaten yayımdan önce “gerçek dağıtım gibi” doğrulamak çok işe yarıyor; yansıma/derleme kırpması sürprizlerini erken yakalamak bence büyük avantaj. Siz bu ayarda testleri kaçırmadan nasıl kuruyorsunuz, AOT ile ilgili ekstra bir şey eklediniz mi? Bu arada bu tarz değişikliklere hazırlık için şunu da okumanız iyi olur: https://www.askinkilic.com.tr/kesintisiz-sema-degisikligi-icin-6-asamali-yol/

Yanıtla
comments user
Arda K. 07/09/2026 15:48

Native AOT’ta yansıma/trim gibi farkların testlerde erken ortaya çıkması fikri baya pratik; ben de birkaç projede “lokalde çalışıyor” sürprizi yaşamıştım. MSTest ile bunu yakalamak zaman kazandırır—siz hangi senaryolarda en çok fark gördünüz? Bu arada benzer bir yaklaşımı daha önce şu yazıda da merak etmiştim: https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/

Yanıtla
comments user
Burak S. 07/09/2026 16:26

Native AOT tarafında dağıtım modelindeki farkların testte erken yakalanması baya işime yarar gibi geliyor. MSTest 4.4 ile bunu deneyince özellikle yansıma/derleme kırpması kaynaklı sürprizler daha az olur diye düşünüyorum. Siz hangi senaryoda en çok fark gördünüz?

Yanıtla

Yorum gönder Yanıtı iptal et

Yazı Ara

Takip Edin

  • Takipçi
  • Takipçi
  • Takipçi
  • Abone
  • Takipçi
  • Microsoft Sovereign Cloud: İş Yükü Bazlı Kontrol Katmanı
    24/10/2026 Microsoft Sovereign Cloud: İş Yükü Bazlı Kontrol Katmanı
  • PowerToys 0.102: Yeni Fare Araçları ve CLI Desteği
    24/10/2026 PowerToys 0.102: Yeni Fare Araçları ve CLI Desteği
  • Copilot Usage Metrics API: IDE Dışı Araç Kullanımı
    24/10/2026 Copilot Usage Metrics API: IDE Dışı Araç Kullanımı
  • Code with Cosmos: Dört Bölümde Üretime Hazır AI Uygulaması
    24/10/2026 Code with Cosmos: Dört Bölümde Üretime Hazır AI Uygulaması
  • GitHub Apps ile Enterprise Yönetimi PAT'siz Yürütmek
    23/10/2026 GitHub Apps ile Enterprise Yönetimi PAT’siz Yürütmek
  • DevOps Güncellemeleri
    09/03/2026 Azure DevOps Server Şubat Güncellemesi: Güvenlik
  • 2026-03-10_15-35-23
    10/03/2026 Microsoft 365 E7: Yapay Zeka ve Güvenlik Bir Arada
  • Artımlı Anlık Görüntü: Anında Geri Yükleme
    09/03/2026 Artımlı Anlık Görüntü: Anında Geri Yükleme
  • Azure Developer CLI 1.34: azure.yaml Katmanları ve
    04/10/2026 Azure Developer CLI 1.34: azure.yaml Katmanları ve
  • Bulut Sunucu Altyapısı
    09/03/2026 Microsoft Sovereign Cloud: İzolasyonda Güvenli Bulut
  • GitHub Copilot Pro Denemeleri Neden Durdu?
    11/04/2026 GitHub Copilot Pro Denemeleri Neden Durduruldu?
  • vcpkg'de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
    06/04/2026 vcpkg’de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
  • MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
    08/04/2026 MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
  • Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
    06/04/2026 Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
  • Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler
    10/04/2026 Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler

Hakkımda

Aşkın KILIÇ

Microsoft Azure Çözüm Uzmanı. Bulut bilişim, yapay zekâ, DevOps ve kurumsal güvenlik üzerine yazılar yazıyorum.

Devamını Oku →

Kategoriler

  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka

Popüler Etiketler

AI ajanları ASP.NET Core Azure azure app service Azure Cosmos DB Azure Developer CLI Azure DevOps Azure Functions Azure OpenAI azure sdk Azure SQL CI/CD CodeQL code review copilot Copilot CLI DevOps Entra ID geliştirici verimliliği GitHub GitHub Actions GitHub Copilot güvenlik Kimlik Doğrulama Kubernetes kurumsal güvenlik kurumsal yapay zeka maliyet optimizasyonu MCP Microsoft Agent Framework Microsoft Azure Microsoft Entra ID Microsoft Foundry MSVC otomasyon performans Pull Request RAG verimlilik veri yönetimi Visual Studio Visual Studio 2026 VS Code yapay zeka Yazılım geliştirme
  • Gizlilik Politikası
  • Çerez Politikası
  • Kullanım Koşulları
  • Hakkımda
  • İletişim

© 2026 Aşkın KILIÇ | Tüm hakları saklıdır. | Powered By SpiceThemes

Çerez tercihleri Zorunlu çerezler sitenin çalışması için kullanılır. Analitik çerezler yalnız açık izninizden sonra Google Analytics ve Microsoft Clarity için etkinleştirilir. KVKK ve Çerez Politikası
✉

Haftalık Bülten

Azure, DevOps ve Yapay Zeka dünyasındaki en güncel içerikleri her hafta doğrudan e-postanıza alın.

Spam yok. İstediğiniz zaman iptal edebilirsiniz.
📱
Uygulamayı Yükle Ana ekrana ekle, çevrimdışı oku
Ana Sayfa
Kategoriler
💻 Geliştirici Araçları 507 yazı 🏗️ Bulut Altyapı 407 yazı 🤖 Yapay Zeka 331 yazı ☁️ Microsoft Azure 279 yazı 🔧 DevOps 277 yazı 🔒 Güvenlik & Kimlik 223 yazı 🏢 Kurumsal Teknoloji 107 yazı 📊 Veri & Analitik 78 yazı 🐳 Konteyner & Kubernetes 62 yazı 📧 Microsoft 365 22 yazı 📁 Azure 1 yazı
Ara
Popüler
Yapay Zeka Azure Kubernetes DevOps Copilot Docker
Paylaş
WhatsApp
İçindekiler
    ← Multiple trusted publishing co...
    GPT-6 Astra Microsoft Foundry’... →
    📩

    Gitmeden önce!

    Her pazar özenle seçilmiş teknoloji yazıları ve AI haberleri doğrudan e-postanıza gelsin. Ücretsiz, spam yok.

    🔒 Bilgileriniz güvende. İstediğiniz zaman ayrılabilirsiniz.

    📬 Haftalık bülten: Teknoloji + AI haberleri
    Beni Takip Et Yeni Azure / AI / DevOps yazılarını GitHub ve RSS üzerinden takip edin.
    GitHub RSS