VS2026 Unit Test Generator
Mevcut bir .NET projesindeki servis metodlarını Roslyn ile analiz edip, bağımlılıkları ve veri modelleriyle birlikte eksiksiz bir test bağlamı çıkaran; bunu Copilot Chat'e devrederek xUnit birim testlerini yüksek coverage hedefiyle ürettiren bir Visual Studio 2026 eklentisi.
Projenin Amacı
Var olan bir kod tabanına sonradan birim test yazmak, çoğu ekibin sürekli ertelediği iştir. Zor olan kısım testin kendisi değildir — testin ihtiyaç duyduğu bağlamı toplamaktır. Bir servis metoduna test yazacaksanız, o metodu okumanız yetmez: çağırdığı private metodları, enjekte edilen bağımlılıkları, dönüş tipini oluşturan DTO'ları ve arkadaki entity'leri de bilmeniz gerekir. Bu toplama işi elle yapıldığında dakikalar alır ve her metot için tekrarlanır.
VS2026 Unit Test Generator tam olarak o toplama işini devralır. Amacı, mevcut bir projedeki servislerin xUnit birim testlerini, kod kapsama (coverage) oranını mümkün olan en yüksek değere çekecek şekilde ürettirmektir.
Eklenti ek bir mock kütüphanesine yaslanmaz; üretilen testler tamamen xUnit üzerine kuruludur.
Nasıl Çalışıyor?
Akış dört adımdan oluşuyor:
1. Çoklu Seçim
Eklenti penceresinden iki taraflı bir seçim yaparsınız:
- Hangi servis metodları test edilecek (çoklu seçim)
- Hangi test service class'larına yazılacak (çoklu seçim)
Böylece tek bir çalıştırmada birden fazla metodu, birden fazla test sınıfına dağıtarak işleyebilirsiniz.
2. Roslyn ile Bağlam Çıkarımı
Seçim yapıldıktan sonra eklenti, Roslyn üzerinden kod tabanını semantik olarak tarar ve teste gereken her şeyi çıkarır:
| Toplanan | Neden gerekli |
|---|---|
| Public metod gövdesi | Test edilecek asıl davranış |
| Çağrılan private metodlar | Dallanmaları görmeden coverage hedeflenemez |
| Bağımlılıklar (interface'ler) | Test kurulumunda karşılanacak yüzeyin tam imzası |
| Entity'ler | Veri modelinin gerçek şekli |
| DTO'lar | Girdi/çıktı sözleşmeleri |
Bu tarama metin araması değil, derleyici seviyesinde bir sembol çözümlemesidir — yani "hangi metot gerçekten neyi çağırıyor" sorusunun kesin cevabıdır.
3. Budama: %60 Bağlam Kârı
Toplanan bağlam ham hâliyle Copilot'a gönderilmez. Roslyn'in sunduğu sözdizim ağacı üzerinde bir budama adımı çalışır: yorum satırları ve test üretimine katkısı olmayan kod parçaları ayıklanır.
Bu adım bağlamda yaklaşık %60 tasarruf sağlar. Kazanç iki yönlüdür: daha az token harcanır ve modelin dikkati gürültüye değil, yalnızca teste konu olan koda yönelir.
4. Clipboard → Copilot Chat
Budanmış bağlam paketi Clipboard'a alınır. Yapmanız gereken tek şey, Visual Studio içindeki Copilot Chat penceresine yapıştırıp Enter'a basmaktır.
Paketin başında UnitTestWriter.agent.md promptu yer alır. Bu prompt modelin serbest yorum yapmasını engelleyen bir kurallar sözleşmesidir: kullanılacak test framework'ü, isimlendirme düzeni, Arrange/Act/Assert yapısı, bağımlılıkların nasıl karşılanacağı ve üretilecek test metodu sayısı buradan dayatılır.
Clipboard içeriği
├── UnitTestWriter.agent.md → framework kuralları ve üretim talimatı
├── Hedef servis metodu → test edilecek davranış
├── Çağrılan private metodlar → dallanma haritası
├── Bağımlılık arayüzleri → karşılanacak imzalar
└── Entity + DTO tanımları → veri sözleşmeleri
Sonuç: seçtiğiniz sayıda, framework kurallarına tam uyumlu ve mümkün olan en yüksek kapsamayı hedefleyen birim test metodları.
Neden Ucuz Modelle de Çalışıyor?
Projenin en dikkat çekici tarafı bu. Copilot'ta model seçimi Auto olarak bıraksanız bile — yani testler en ucuz yoldan yazdırılsa bile — çıktı yüksek doğrulukta oluyor.
Sebebi basit: modele tahmin edecek bir şey bırakılmıyor.
Normal şartlarda bir dil modelinden test istediğinizde, model bağımlılıkların ne döndürdüğünü, DTO'nun hangi alanlara sahip olduğunu ve private metodun hangi koşulda hangi dala girdiğini tahmin etmek zorunda kalır. Tahmin ettiği her şey hata payıdır ve bu payı kapatmanın yolu genelde daha güçlü (ve daha pahalı) bir modele geçmektir.
Burada ise bu bilgilerin tamamı bağlamda determinist olarak zaten mevcut. Roslyn'in çıkardığı sembol bilgisi kesindir, yoruma açık değildir. Geriye modele kalan iş, elindeki net veriyi kurallı bir test metoduna dönüştürmektir — bu da küçük modellerin rahatlıkla başardığı bir görevdir.
Çıkarılan ders: üretilen kodun kalitesini belirleyen şey modelin zekâsından çok, ona verilen bağlamın eksiksizliği ve determinizmidir. Bağlamı doğru kurduğunuzda pahalı modele ihtiyaç kalmıyor.
Teknik Yığın
- Roslyn (.NET Compiler Platform): Semantik model üzerinden sembol çözümleme, çağrı grafiği çıkarımı ve sözdizim ağacı budama
- Visual Studio 2026 Extensibility Model (VisX): Tool window, çoklu seçim arayüzü ve komut entegrasyonları
- VSIX Package: Eklenti manifest'i ve dağıtım paketi
- .NET 8: Eklenti çalışma zamanı
- xUnit: Üretilen testlerin hedef framework'ü
- GitHub Copilot Chat: Üretim katmanı (agent prompt ile yönlendirilir)
Kullanım Senaryoları
| Senaryo | Açıklama |
|---|---|
| Brownfield projeler | Yıllardır testsiz ilerlemiş bir kod tabanına toplu hâlde coverage kazandırmak |
| Coverage eşiği | CI/CD hattındaki minimum kapsama şartını karşılamakta zorlanan servisleri hızla eşiğin üstüne çıkarmak |
| Standart dayatma | UnitTestWriter.agent.md sayesinde ekipteki herkesin aynı test yazım düzenine uymasını sağlamak |
| Maliyet kontrolü | Ucuz model ayarıyla çalışarak kurumsal AI kotasını verimli kullanmak |
Sonuç
VS2026 Unit Test Generator, "yapay zekâ bizim yerimize test yazsın" fikrinden çok, "yapay zekâya doğru soruyu doğru bağlamla soralım" fikrinin bir uygulaması. Roslyn'in kesinliğiyle Copilot'un üretkenliğini birleştirince, ortaya hem hızlı hem de tekrarlanabilir bir test üretim hattı çıkıyor.
En sevdiğim tarafı ise ekonomik olanı: bağlamı %60 budayıp doğru kurguladığınızda, en ucuz model ayarıyla bile ciddi coverage değerlerine ulaşabiliyorsunuz.
Muhammed Emin Özdemir
Kurumsal sistemlerde uzmanlaşmış Senior Software Developer. Temiz kod, ölçeklenebilir mimariler ve modern UI/UX üzerine odaklanıyor.
Hakkımda daha fazlası →
Yorumlar
İlk yorumu siz yapın