JUnit 4.8.2'yi kullanarak bir dizi Selenium testi (aslında WebDriver destekli Selenium) kullanıyorum. Testin bir onaylama işlemini başarısız olduğu anda testlerin otomatik olarak tarayıcının ekran görüntüsünü almasını istiyorum. Tüm testler SeleniumBaseTestCase
'dan devralınır ve çoğunluk daha sonra SeleniumBastTestCaseWithCompany
'dan (Selenyum yoluyla ortak test verilerini oluşturmak ve temizlemek için @Before
ve @After
yöntemlerini kullanır) daha fazla devralır.JUnit 4.8 çalıştırma kodunu, başarısız bir sınamadan sonra, ancak @After yöntemlerinden önce nasıl yapabilirim?
Ben ekran görüntüsü almak için TestWatchman
'ın failed
yöntemi geçersiz kılmasını, SeleniumBaseTestCase
bir @Rule
olarak TestWatchman
bir alt sınıfını ekleyerek denedim. Sorun şu ki, test verilerini temizleyen @After
metodu TestWatchman
'un failed
yönteminden önce çalıştırıldığından, ekran görüntüleri temizleme işleminin son adımıdır, başarısız olan test değil. İçine biraz Looking
Öyle görülüyor ki, TestWatchman
bırakarak @After
yöntemlerini çağırır TestWatchman
'ın apply
yöntem sadece geçti Statement
çağırır' ın yöntemini değerlendirmek (sadece maruz yöntemi), (veya başka Rule
) şansı Söyleyebildiğim kadarıyla, testin yürütülmesi ile @After
yöntemlerinin arasına herhangi bir kod eklemek.
Ben de özel @AfterFailure
ile açıklamalı yöntemleri (böylece ekran görüntüsü böyle bir @AfterFailure
yöntemde alınabilir) @After
yöntemlerle önce çalıştırılır, böylece yaratılan Statement
s değiştirmek için özel bir Runner
oluşturmak yaklaşımlar gördük, ama bu ettik BlockJUnit4ClassRunner
'un withAfters
yöntemini geçersiz kılmakta, bu yöntem kullanımdan kaldırılmıştır ve özel hale gelmesi nedeniyle documentation uyarınca Kurallar'ın kullanılmasını önerir.
SO hakkında @Rule lifecycle hakkında başka bir cevap buldum, bu da JUnit 4.8'de mümkün olmayabilir, ancak JUnit 4.10'da mümkün olmayabilir. Eğer bu doğruysa o zaman yeterince adil olursa, sadece ondan bir onay isterim.
İstediğim şeyi başarabileceğim zarif ve geleceğe dönük bir yol hakkında herhangi bir düşünce çok takdir edilecektir!
Evet, JUnit'i yükseltmenin yol olduğunu düşünüyorum - 4.8.2'de özellikle tatmin edici bir çözüm göremiyorum. Ekran görüntüleri almak için 'SeleniumBaseTestCase' üzerinde korumalı bir TestWatcher'ım ve bununla tek kural olarak bir RuleChain var. Daha sonra, “SeleniumBaseTestCaseWithCompany” içinde şirket oluşturmak/silmek için bir ExternalResource var ve süper sınıfın RuleChain'i hem ekran görüntüsünü hem de oluşturma/silme kuralını emrediyorum. Güzel çalışıyor, teşekkürler. – Rowan
Sadece bir not. 4.11'de, bir yöntemde @Rule belirtebilirsiniz, böylece bir alanı gölgelemek yerine bu yöntemi geçersiz kılabilirsiniz. Ama 4.11 henüz serbest bırakılmadı. –
Ah, bilmesi iyi - değişkenleri gölgelemek, benim için huzursuz olduğum tek şeydi ... – Rowan