Bugün JUnit iddiaları yerine java iddiası olan bir JUnit test vakası gördüm — Birini diğerine tercih etmenin önemli avantajları veya dezavantajları var mı?
Bugün JUnit iddiaları yerine java iddiası olan bir JUnit test vakası gördüm — Birini diğerine tercih etmenin önemli avantajları veya dezavantajları var mı?
Yanıtlar:
JUnit4'te, bir JUnit assert tarafından atılan istisna (aslında Hata), java assert
anahtar sözcüğü (AssertionError) tarafından atılan hatayla aynıdır , bu nedenle, assertTrue
yığın izleme ile tamamen aynıdır ve farkı anlayamazsınız.
Bununla birlikte, iddiaların JVM'de özel bir bayrakla çalışması gerektiğinden, birçok testin yalnızca JUnit testleri çalıştırıldığında birisinin sistemi bu bayrakla yapılandırmayı unutması nedeniyle başarılı görünmesine neden olması gerekir - bu iyi değil.
Genel olarak, bu nedenle, JUnit'i kullanmanın assertTrue
daha iyi bir uygulama olduğunu, çünkü testin çalıştırılmasını garanti ettiğini, tutarlılığı (bazen assertThat
java anahtar kelimesi olmayan diğer iddiaları kullanırsınız ) ve JUnit'in davranışının geçerli olduğunu iddia ediyorum. gelecekte değişmesi gerekir (bir tür filtreye veya gelecekteki başka bir JUnit özelliğine bağlanmak gibi), kodunuz bundan yararlanabilecektir.
Java'daki assert anahtar kelimesinin gerçek amacı, onu çalışma süresi cezası olmadan kapatabilmektir. Bu, birim testleri için geçerli değildir.
Yerleşik assert
ifadeden daha zengin bir API sundukları ve daha da önemlisi JVM argümanını assert
gerektiren aksine açıkça etkinleştirilmeleri gerekmediği için JUnit iddialarını tercih ederim -ea
.
-ea
her zaman etkindir mvn test
, buna gerek yoktur -ea
. Daha zengin api, iyi yakalama. Bazen API'nin testte kötüye kullanıldığını düşünüyorum çünkü uygulamanın bir parçası değil (a in api), ona sadece daha zengin yöntemler demeyi tercih ediyorum.
Bir test başarısız olduğunda daha fazla bilgi alırsınız.
assertEquals(1, 2);
sonuçlanır java.lang.AssertionError: expected:<1> but was:<2>
vs
assert(1 == 2);
sonuçlanır java.lang.AssertionError
mesaj bağımsız değişkenini eklerseniz daha fazla bilgi edinebilirsiniz assertEquals
assert 1==2: "1 is not 2";
.
assert
doğruluğu kontroller için - tercih edilebilir olacağını performansını etkileyecek ve böylece en iyi engelli varsayılan olarak bulunmaktadır. Ancak deneyimlerime göre, iddiaların çoğu her zaman açık olmalıdır.
JUnit asserts'i test senaryolarında ve kodda java'nın assert'ini kullanın derim. Başka bir deyişle, gerçek kod, aşikar olduğu üzere asla JUnit bağımlılıklarına sahip olmayacaktır ve eğer bir testse, JUnit varyasyonlarını kullanmalıdır, asla iddia etmeyecektir.
JUnit kullanıyorsanız, JUnit iddialarını kullanmanız gerektiğini söyleyebilirim. assertTrue()
temelde aynıdır assert
, Aksi takdirde neden JUnit kullanasınız ki?
Assert
daha fazla standart şablon gerekir. assert
JUnit olmadan bütün bir çerçeve yazmanız gerekir.
Yalnızca parlak ve yeni şeyler kullanıyorsanız, ancak Java'da 1.4SE'ye kadar kullanılmadığını iddia ediyorsanız, bu geçerli olmayabilir. Bu nedenle, daha eski teknolojiye sahip bir ortamda çalışmanız gerekiyorsa, uyumluluk nedenleriyle JUnit'e yönelebilirsiniz.