- Mockito'nun çekirdek bakım sorumlusu, Mart 2026 itibarıyla yaklaşık 10 yıllık bakım sorumluluğunu tamamlayacağını ve önümüzdeki birkaç ay içinde kademeli bir yetki devri gerçekleştireceğini açıkladı
- Kararın doğrudan tetikleyicilerinden biri olarak JVM 22'deki ajan politikası değişikliğini gösterdi; güvenlik amacıyla yapılan değişikliği anlayışla karşılasa da alternatifsiz tek taraflı geçiş talebi ve ekosistem düzeyinde yeterli değerlendirme yapılmaması büyük bir yük oluşturdu
- Özellikle Mockito, JVM ajanlarının en büyük kullanıcılarından biri olmasına rağmen, build aracı desteği veya işbirlikçi tartışmalar olmadan sorunun çözümünü üstlenmek zorunda kalan yapının kaynak tükenmesine ve aşırı sorumluluk yüküne yol açtığını anlattı
- Bir diğer etken olarak Kotlin desteğinin yapısal karmaşıklığını işaret ederek, Kotlin'e özgü JVM çalışma biçimiyle örtüşmeyen özelliklerin Mockito içinde tekrarlanan API'ler ve dallanan mantığı artırdığını, bunun da bakımı zorlaştırdığını belirtti
- Son dönemde Rust tabanlı web motoru Servo üzerinde çalışırken daha fazla keyif ve motivasyon bulduğunu, sınırlı kişisel zamanı düşünüldüğünde zorunluluk gibi hissettiren gönüllü bakım işini sürdürmenin zorlaştığı sonucuna vardığını paylaştı
10 yıllık dönüm noktası ve görev devri kararı
- Mart 2026'da Mockito bakımının 10. yılına ulaşırken, bu zamanı sorumluluğu devretmek için doğal bir dönüm noktası olarak gördüğünü belirtti
- Önümüzdeki birkaç ay boyunca mevcut bakım sorumlusu olarak bilgi aktarımı ve geçişin istikrarlı biçimde sürmesine odaklanmayı planlıyor
- Sonraki bakım yapısı ve uzun vadeli yol haritasına ilişkin tartışmaların ayrı bir GitHub issue'sunda yürütüleceği ifade edildi
JVM ajan politikası değişikliğinin yarattığı tükenmişlik
- Mockito 5'te varsayılan artifact'in JVM ajanına dönüştürülmesinin arkasında, JVM 22'den itibaren dinamik ajan eklemenin bir flag arkasına gizlenmesiyle gelen politika değişikliği bulunuyor
- Güvenlik açısından değişikliğin amacına katılsa da alternatif tasarım veya geçiş desteği olmadan kararın fiilen dayatılmış olması sorun olarak öne çıkarıldı
- Mockito, JVM özellikleri için sık sık öncü örnek olarak kullanılmış olmasına rağmen, bu değişimde işbirliğine dayalı geri bildirim döngüsünün işlemediği belirtildi
- Ajanlara yönelik build araçları düzeyindeki desteğin hâlâ yetersiz olması, bu özelliğin önceliğinin düşük görüldüğünü gösteriyor şeklinde değerlendirildi
- Gönüllü katkı sunan bakım sorumlularına aşırı baskı yüklendiğinde açık kaynak işbirliği yapısının kolayca çözülebileceği vurgulandı
Kotlin desteğinin yarattığı yapısal yük
- Kotlin'in yaygınlaşmasını olumsuz görmediğini, ancak JVM iç davranışındaki farklılıklar nedeniyle mockito-core'a Kotlin'e özel çok sayıda işleme akışı eklendiğini söyledi
suspend fonksiyonlar gibi Kotlin özelliklerinin tutarlı biçimde çalışmadığı örnekler bulunduğu, bunun da API tekrarını ve karmaşıklığı artırdığı aktarıldı
- Sonuç olarak kod tabanının spagetti hâline geldiği ve bakım zorluğunun arttığı, ayrıca bu tür çalışmaların kişisel olarak keyif vermediği açıkça dile getirildi
- Kotlin merkezli geleceğin uzun vadede Mockito bakım motivasyonunu zayıflatan bir unsur olduğu ifade edildi
Diğer açık kaynak faaliyetlerinde yeniden keyif bulmak
- Çok sayıda açık kaynak projeye katkı sunduğunu, son dönemde ise Rust tabanlı web motoru Servo üzerinde çalışırken geliştirme keyfini yeniden hissettiğini söyledi
- Sınırlı akşam saatlerini nasıl değerlendireceği konusunda, Mockito'ya kıyasla başka projelerin daha fazla tatmin sağladığı bir durumun sürdüğü belirtildi
- Gönüllülük esaslı bakım işlerinin uzun süre bir zorunluluk gibi hissedilmesinin sağlıklı olmadığına karar verdiğini paylaştı
Kararın bütünsel arka planı ve mesajı
- JVM politika değişikliğinin yarattığı hayal kırıklığı, Kotlin desteğinin yapısal sınırları ve diğer projelerde motivasyonun yeniden bulunması kararın temel nedenleri olarak gösterildi
- Bu etkenlerin tüm katkıcılar için aynı şekilde geçerli olmadığını, başkalarının Kotlin desteğine daha istekli yaklaşabileceğini kabul etti
- Bakım sorumlusunun değişmesinin projenin uzun vadeli sağlığı açısından daha faydalı olacağı değerlendirmesiyle görevi bırakma kararı aldı
- Açık kaynak bakım deneyimini bir onur ve ayrıcalık olarak nitelendirirken, başkalarını da gönüllü katkıda bulunmaya teşvik etti
1 yorum
Hacker News görüşleri
Google'da ikinci projem üzerinde çalışırken mocking yaklaşımını tamamen bırakmaya karar verdim
GWT ile sistemi yeniden yazarken test kapsamını zorunlu kılmıştık; herkes yalnızca kendi servisini test ediyor ve DI ile mock enjekte ediyordu
Sonuç olarak sistem aşırı kırılgan hale geldi ve 8 haftalık servis bile sanki legacy code gibi hissettiriyordu. Backend sırasını ya da çağrı sayısını değiştirmek bile bütün gün mock düzeltmekle uğraşmaya yol açıyordu
Guice modül yapısı da karmaşıktı; test ortamı için mock enjekte etmek üzere tamamen farklı bir injector oluşturmak gerekiyordu ve sonunda test ile production farklı ortamlara dönüşüyordu
Ayrıca EasyMock vs Mockito tartışmaları yüzünden sayısız mühendislik kaynağı boşa harcandı
O günden beri neredeyse hiç mock kullanmıyorum. Bunun yerine basit dummy servisler yapıp asgari gerçek davranışı taklit etmenin çok daha iyi olduğunu düşünüyorum
Mock'a takıntılı insanları görünce hâlâ temkinli oluyorum
Kotlin'de 4 yıldır Mockito kullanıyorum ve vakaların %99'unda gayet yeterliydi
Karmaşık ya da kafa karıştırıcı durumların çoğu aslında ilgi alanlarını yeterince ayırmamamdan kaynaklanıyordu
MockK ile farkı neredeyse yok; daha çok sözdizimi farkı gibi. Yine de Mockito'nun bakımı bırakılırsa değiştirmeyi düşünebilirim
Mock'lar, uygulama 4-5 katmanlı olduğunda en etkili oluyor
Ben de eskiden DI'yi aşırı kullanıp karmaşık bir kod ağı oluşturmuştum, ama artık katman sayısını sınırlıyor ve tutarlı bir yapı koruyorum
Tek sınıf testlerinde mock, gereksinim doğrulamada ise entegrasyon testleri kullanıyorum
Sonuçta önemli olan araç değil, geliştiricinin disiplini
Mockito, Java'daki en popüler mocking framework'ü
Platform değişikliği nedeniyle Mockito agent tabanlı hale geldi; çünkü JVM 22'den itibaren dinamik agent yükleme bir flag'in arkasına alındı
Bu tür bir değişiklik enterprise benimsemeyi yavaşlatabilir
Platform değişikliğinin Mockito topluluğuna aşırı sorumluluk yüklenmesi gibi hissettirdiğini düşündüm
“JVM ekosistemini engelliyorlar” tarzı suçlamaların sağlıklı olmadığını düşünüyorum
Açık kaynak bakım işi gerçekten yıpratıcı görünüyor
Ben olsam muhtemelen projeyi arşivler ve tamamen çekilirdim. Tim'in en azından şimdi huzur bulmasını umuyorum
TimvdLippe'e teşekkür etmek istiyorum. Harika bir vizyon ve bağlılık gösterdi
Mockito, testi iyi bilen biri kullandığında gayet iyi olabilir
Hangi dil ya da framework olursa olsun, kötü testlerin suçu yazan kişidedir
“Agent”, JVM'e bağlanıp çalışan uygulamayı enstrümante edebilen ve değiştirebilen bir aracı ifade eder
Profiler'lar, debugger'lar ve monitoring araçları bu mekanizmayı kullanır
Java 21'den itibaren güvenliği artırmak için varsayılan olarak devre dışı bırakıldı ve yalnızca
-XX:+EnableDynamicAgentLoadingflag'i ile izin veriliyorAyrıntılar için JEP 451 belgesine bakılabilir