İç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 0 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.

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

Teams Agent Kurulumu Artık Tek Komutla Tamam
Teams Agent Kurulumu Artık Tek Komutla Tamam30 Nis 2026
VS Code Haziran 2026 Copilot: Paralel Ajanlar ve Maliyet Netliği
VS Code Haziran 2026 Copilot: Paralel Ajanlar ve Maliyet Netliği8 Tem 2026
Azure SDK Release (July 2026)
Azure SDK Release (July 2026)29 Tem 2026
GitHub Code Quality API: Repo Bazlı Açma-Kapama Dönemi
GitHub Code Quality API: Repo Bazlı Açma-Kapama Dönemi29 May 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

İlginizi Çekebilir

Multiple trusted publishing configurations for npm
Aşkın KILIÇ 0

Multiple trusted publishing configurations for npm

06/09/2026
Kurumsal Yapay Zekâda Azure’un Uçtan Uca Yaklaşımı
Aşkın KILIÇ 0

Kurumsal Yapay Zekâda Azure’un Uçtan Uca Yaklaşımı

06/09/2026
Kesintisiz Şema Değişikliği İçin 6 Aşamalı Yol
Aşkın KILIÇ 0

Kesintisiz Şema Değişikliği İçin 6 Aşamalı Yol

06/09/2026

Yorum gönder Yanıtı iptal et

Yazı Ara

Takip Edin

  • Takipçi
  • Takipçi
  • Takipçi
  • Abone
  • Takipçi
  • MSTest 4.4 ile Native AOT Uygulamalarını Test Etmek
    07/09/2026 MSTest 4.4 ile Native AOT Uygulamalarını Test Etmek
  • Multiple trusted publishing configurations for npm
    06/09/2026 Multiple trusted publishing configurations for npm
  • Kurumsal Yapay Zekâda Azure’un Uçtan Uca Yaklaşımı
    06/09/2026 Kurumsal Yapay Zekâda Azure’un Uçtan Uca Yaklaşımı
  • Kesintisiz Şema Değişikliği İçin 6 Aşamalı Yol
    06/09/2026 Kesintisiz Şema Değişikliği İçin 6 Aşamalı Yol
  • Fairwind Programı: Hükümetlere Sınırlı Siber Savunma
    06/09/2026 Fairwind Programı: Hükümetlere Sınırlı Siber Savunma
  • Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı
    11/04/2026 Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı
  • GitHub Code Scanning’de Toplu Düzeltme: PR’lar Hızlandı
    07/04/2026 GitHub Code Scanning’de Toplu Düzeltme: PR’lar Hızlandı
  • 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?
  • GitHub Copilot Cloud Agent İçin Runner Kontrolü: Kurumsal Düzen
    03/04/2026 GitHub Copilot Cloud Agent İçin Runner Kontrolü: Kurumsal Düzen
  • Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
    06/04/2026 Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
  • 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

SİZİN İÇİN DERLEDİK

MSTest 4.4 ile Native AOT Uygulamalarını Test Etmek
DevOps Geliştirici Araçları Microsoft Azure

MSTest 4.4 ile Native AOT Uygulamalarını Test Etmek

07/09/2026 Aşkın KILIÇ
Multiple trusted publishing configurations for npm
Bulut Altyapı Geliştirici Araçları Güvenlik & Kimlik

Multiple trusted publishing configurations for npm

06/09/2026 Aşkın KILIÇ
Kurumsal Yapay Zekâda Azure’un Uçtan Uca Yaklaşımı
Microsoft Azure Yapay Zeka

Kurumsal Yapay Zekâda Azure’un Uçtan Uca Yaklaşımı

06/09/2026 Aşkın KILIÇ
Kesintisiz Şema Değişikliği İçin 6 Aşamalı Yol
Bulut Altyapı DevOps

Kesintisiz Şema Değişikliği İçin 6 Aşamalı Yol

06/09/2026 Aşkın KILIÇ
Fairwind Programı: Hükümetlere Sınırlı Siber Savunma
Güvenlik & Kimlik

Fairwind Programı: Hükümetlere Sınırlı Siber Savunma

06/09/2026 Aşkın KILIÇ
GitHub HydraFusion: Göreve Göre Model Orkestrasyonu
Bulut Altyapı Geliştirici Araçları Yapay Zeka

GitHub HydraFusion: Göreve Göre Model Orkestrasyonu

05/09/2026 Aşkın KILIÇ
Kubernetes v1.37’de Rootless Mod Beta Aşamasına Geldi
Güvenlik & Kimlik Konteyner & Kubernetes

Kubernetes v1.37’de Rootless Mod Beta Aşamasına Geldi

05/09/2026 Aşkın KILIÇ
SQL Decomposition: T-SQL’de Karmaşıklığı Azaltma
Geliştirici Araçları Veri & Analitik

SQL Decomposition: T-SQL’de Karmaşıklığı Azaltma

05/09/2026 Aşkın KILIÇ
AMIE ile Gerçek Zamanlı Klinik Video Görüşmeleri
Bulut Altyapı Yapay Zeka

AMIE ile Gerçek Zamanlı Klinik Video Görüşmeleri

05/09/2026 Aşkın KILIÇ
GitHub Copilot weekly releases — August 31
Bulut Altyapı Geliştirici Araçları Yapay Zeka

GitHub Copilot weekly releases — August 31

04/09/2026 Aşkın KILIÇ
GPT-6 Astra GitHub Copilot’ta Kullanıma Sunuldu
DevOps Microsoft Azure

GPT-6 Astra GitHub Copilot’ta Kullanıma Sunuldu

04/09/2026 Aşkın KILIÇ
Microsoft Agent Framework’e Azure Cosmos DB belleği
DevOps Geliştirici Araçları Microsoft Azure

Microsoft Agent Framework’e Azure Cosmos DB belleği

04/09/2026 Aşkın KILIÇ

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 sdk Azure SQL bulut bilişim C++ CI/CD CodeQL code review copilot Copilot CLI DevOps geliştirici verimliliği GitHub GitHub Actions GitHub Copilot güvenlik Kimlik Doğrulama Kubernetes Kurumsal geliştirme kurumsal güvenlik kurumsal yapay zeka maliyet optimizasyonu MCP Microsoft Agent Framework Microsoft Azure Microsoft Foundry otomasyon performans Pull Request RAG SEO uyumlu verimlilik veri yönetimi Visual Studio Visual Studio 2026 VS Code yapay zeka yapay zeka ajanları 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ı 432 yazı 🏗️ Bulut Altyapı 345 yazı 🤖 Yapay Zeka 289 yazı 🔧 DevOps 242 yazı ☁️ Microsoft Azure 231 yazı 🔒 Güvenlik & Kimlik 199 yazı 🏢 Kurumsal Teknoloji 83 yazı 📊 Veri & Analitik 62 yazı 🐳 Konteyner & Kubernetes 53 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...
    →
    📩

    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