Soru EclEmma ile Java'da kod kapsamı istisnai yöntemleri beklemeden tarama


Eclipse ve EclEmma kullanarak kod kapsamımı java'ya almaya çalışıyorum.

Testlerim JUnit 4 kullanıyor ve bazı testlerim şöyle görünüyor:

    @Test(expected = IllegalArgumentException.class)
    public void createTime_withInvalidMinuteUnder0_throws(){
    //Arrange
    ...
    //Act
    Something triggering IllegalArgumentException Here       
}

Ve EclEmma, ​​testin başarısız olduğunu söylüyor çünkü atılan bir IllegalArgumentException var. Yani bir şey atması gerekse bile kod kapsama göstergesimi düşürüyor. JUnit beklenen istisna etiketinin görünmesini sağlamak için bir seçenek var mı?

düzenleme: Eğer testin beyanına ek atmayı eklerseniz, işe yaradığını öğrendim!


18
2017-10-06 07:01


Menşei




Cevaplar:


Hayır, EclEmma'yı fark etmenin bir yolu yok. expected fıkra. Bu gerçeği kabul ediyorlar İşte.

Neden JUnit4 test vakaları, beklenen istisnalarla kaplanmamış olarak gösteriliyor?

Beklenen istisnalara sahip JUnit4 test senaryoları, uygulandıkları halde örtülmemiş olarak gösterilmektedir. Bunun nedeni, altta yatan JaCoCo kod kapsama kütüphanesinin, sadece belirli sondalar çalıştırıldığında çalıştırılan kodu dikkate almasıdır. İle işaretlenmiş başarılı test durumları için @Test{expected=...} durum bu değil.

Şahsen, bunun için çok fazla endişelenmem. Test vakalarının kapsamı, EclEmma'nın size anlatabileceği en az ilginç şeydir; Bu metrikleri her zaman tamamen görmezden gelir ve üretim kodumun kapsamına odaklanırım.


21
2017-10-06 07:39



Eclemma bana daha ilginç şeyler nelerdir? - Pacane
Test kodunuz yerine üretim kodunuz için kod kapsamı metriklerine başvurdum. Yoksa orijinal sorunuzu yanlış mı anladım? - Duncan Jones
Oh, kötüyüm, cevabındaki ifadeni yanlış anladım. - Pacane
Testleriniz ele alınmak zorundadır, sadece istisna vakaları eclemayla kapsanmamaktadır. - Diego Faria


Henüz yorum yapamıyorum, ancak kabul edilen cevapla ilgili olarak, test kodunuzun kapsamına dikkat etmeniz için çok iyi bir neden olduğunu belirtmek istedim.

JUnit ile test yöntemini isimlendirmek veya JUnit sürümünüze bağlı olarak @Test ek açıklamalarını unutmak kolay bir yoldur. Bunu yapın ve katı yeşil çubuğun, eklediğiniz güzel testin aslında hiç kaçmadığı zaman geçtiğini ifade etmek için kolayca kandırıldınız. Kapsama renklendirmesi bunu çok belirgin bir şekilde gösterecektir. Elbette, bu konuya dikkat çekince, bazı istisnalar attığınız testler, yaptıkları zaman çalışmadıkları gibi görünebilir.


4
2018-01-30 13:50





Aynı meseleyle karşı karşıya kaldım ve bu sıkıntının en önemli nedenini ele alan bir çekme talebi teklif ettim. Çok fazla prob eklemek yerine, sadece yöntem çağrışımlarının op kodlarını ele alıyorum. Başka bir deyişle, bir yöntem çağırma tarafından atılan bir istisnanın neden olduğu (daha önce) yanlış kapsama sonuçları sorunu çözülür, ancak istisna, örneğin, bir sıfıra bölünme, bir yanlış döküm veya bir dizi dizini tarafından atılır değilse sorun.

https://github.com/jacoco/jacoco/pull/261

Çekme isteğiyle ilgili yorum yapmaktan çekinmeyin veya JaCoCo postalama listesinde başladığım tartışmaya katılın.


0
2018-01-06 14:13