Bir animasyonu tetikleyen bir düğmeye basıyorum ve animasyonu tamamladıktan sonra bir etiketin metnini değiştirir. Bir test yazmak istiyorum, butona basıldığında, etiketin metninin düzgün bir şekilde değiştiğini doğrular.iOS TDD: UIVIew animateWithDuration kullanan bir yöntemin sınanması: animasyonlar: tamamlama:
IBAction düğmesine basıldığında, [UIView animateWithDuration:animations:completion:]
kullanılacaktır. Açıkçası benim birim testimin bir animasyonun tamamlanması için 0,5 saniye beklemesini istemiyorum.
UIView'le dalga geçmeyi düşündüm, ancak UIView'i bir denetleyiciye bağımlı olarak enjekte etmek tuhaf görünüyor. Ayrıca, kullanıyorum alay çerçeve (OCMockito) alay sınıf yöntemleri ile iyi çalışmıyor gibi görünmüyor.
Ben de yöntem swizzling veya completion:
bloğun ardından animations:
blok UIView
için bir test kategorisi yazma ve hiçbir şey yapmaz bir uygulama kullanarak ancak çağırmak düşündü. Bu benim için biraz bozuk görünüyor; UIView üzerinde bir sınıf yönteminin uygulanmasının geçersiz kılınmasının, yoldaki istenmeyen sonuçları olabileceğinden endişeleniyorum.
TDD'ye yeni olan, burada en iyi uygulamanın ne olduğundan emin değilim. Bu, "UI twiddling" olarak düşünülmesi gereken ve bu yüzden test edilmeden bırakılması kabul edilebilir kod parçalarından biri mi? Yoksa bunu özlediğimi test etmenin daha açık bir yolu var mı?
Bu konuyla ilgili merak: Animasyonun test tamamlanmadan önce çalışacağına dair bir garanti var mı? Bu animasyon bloğu bir şekilde bir sebepten dolayı gecikebilir mi? – Ying
Bu aslında iyi bir nokta. Animasyon runloopta sıraya girecek ve normalde testin geri dönüşünden sonra animasyonun gerçekleşeceği anlamına gelir. Bununla birlikte, <= 0 süresiyle animasyon yapmak, değişikliğin hemen gerçekleşmesine neden olan özel bir durumdur. –
@Benoit animasyonu süresinin 0 veya daha az olması, tamamlanma blokunu hemen çağırmaz. 0 süre bile olsa, sonraki çalışma döngüsündeki bloğu çağırıyor olabilir. Yaptığım şey, GCD gecikme bloğu içindeki iddiaları çağırmak. Çözümümü açıklamak için ayrı bir cevap verdim. –