Bir oyunu test etmenin birden çok yolu vardır, en çok kullanılan iki yöntemdir: birim ve entegrasyon testi.
İçin birim testOyunun iç işleyişini, aslında çalıştırmadan test ediyorsunuz. Bağımlılıkları soyutlanmış belirli modüller için bunu yapabilirsiniz (örneğin, belirli bir dizi faktöre dayanarak elde ettiğiniz Quest XP'yi hesaplayan mantık; belirli bir sesin çalınıp çalınmadığı). Mantığınızı ne kadar soyutladığınıza bağlı olarak, daha fazlasını test edebilirsiniz, ancak özellikle birlik için, oyun mimarisinin yapılış şekli göz önüne alındığında daha zor olabilir (örneğin, tek davranıştan miras). Bununla birlikte, kompozisyon gibi OOP desenleri uygulayarak, bazen biraz aşırı görünse bile, belirli bir şekilde (örneğin fizik) test edilebilen mantık parçalarını çıkarabilirsiniz. Her şey, ne kadar zamanınız olduğuna, projeyle sıfırdan başlayıp başlamamanıza, ne kadar deneyime sahip olduğunuza vb. Bağlıdır. Genel olarak, Oyunlarda diğer oyun dışı yazılım projelerine kıyasla çok fazla birim testi görülmedi. Bu tür testlerin, taklit ettiğiniz sahte davranışları sağladığınız için otomatikleştirilmesi oldukça kolaydır.
İçin entegrasyon testi , sen etkileşim, belirli bir zamanda "tüm" oyun ile tüm parçaların çalışırken. Test etmek istediğiniz şeylerin derinliğine bağlı olarak, açıkça imkansız olmanın çok kolay olabileceğini görüyorum.
Bir fikir, yaptığı her (en) eylemi kaydeden (yani, canavarı yumuşatma, ses çalma, başlangıç efekti, yumurtlama parçacığı) kaydeden bir "entegrasyon testi" yapısına sahip olmak olacaktır . Belirli bir süre çalıştıktan sonra, belirli bir desenle eşleşip eşleşmediğini görmek için günlükleri kontrol edebilirsiniz (bu aynı zamanda oyunun girdilere bağlı olarak ne kadar rasgele olduğuna da bağlıdır). Şimdi, bu kulağa basit geliyor, ama soru şu: Oyuna istenen eylemleri yapmasını nasıl söylersiniz? Bu da beni ikinci fikre getiriyor.
Başka bir fikir de, test amacıyla, istekleri işleyebilen (örn., Bir REST API aracılığıyla) ve varlıklar üzerinde etkili olan bir çeşit sunucuya sahip olmak olacaktır. İstekler şu gibi şeyler olabilir: sola hareket etme, atlama, X derece döndürme, görünüm penceresini değiştirme vb. Bu yaklaşımla, doğrudan durumu kontrol ederek veya sanal bir doğrulama yaparak oyunun beklendiği gibi hareket ettiği "kontrolleri" de yapabilirsiniz. gerçekleşen olayların günlüğü. Bu yaklaşım, cep telefonları için diğer UI test araçları tarafından kullanılır (örn. Xamarin Test Cloud)
Kontrol kısmı için, oyununuz dokunmatik / tarayıcı tabanlıysa, bunun yerine eylemleri sanal bir dokunmatik / giriş cihazı üzerinden simüle edebilirsiniz, ancak bu, eylem karmaşıklığına bağlı olarak biraz daha zordur.
Görsel yönüyle ilgili başka bir fikir, başlangıç aşamasında bazı referans ekran görüntüleri, görüntüler almak ve daha yeni bir yapıda aynı eylem dizisi gerçekleştikten sonra bunları karşılaştırmaktır. Karşılaştırma, küçük değişikliklere karşı korunmak için belirli bir sapma payına sahip olabilir. Testler sırasında, uymayan ekranları günlüğe kaydedebilir ve farkı görebilirsiniz. Farklı değişikliklerden dolayı referans ekranlarının güncellenmesi gerekebilir. Bu durumda, oyun önceden ayarlanmış eylemlerle tekrar çalıştırılabilir ve referans görüntüler güncellenebilir. Parçacıklar oluşturmak için kullanılan bir çeşit tohum ayarlamak için önceki fikri kullanmazsanız, bu muhtemelen parçacık sistemleri veya rastgele oluşturulmuş sahnelerle çok iyi çalışmaz.
Sesler için, biraz daha zor olabilir, çünkü OUT cihazını "dinlemeyi" içerecektir (bu her zaman mümkün değildir IIRC, sistemin donanımına bağlıdır). Ancak, mümkünse resimlerle aynı referans tabanlı karşılaştırmayı yapabilirsiniz.
Umarım bu, oyun testini nasıl otomatik hale getirebileceğinize ışık tutar.
Daha Sonra Düzenleme: Sadece belirli bitleri nasıl yapacağınıza dair bazı işaretler verebilecek başka bir ilgili soru olduğunu görüyorum: Oyunların otomatik testi