JUnit yardımı için Java kodunu test etme – Öğretici. Java Yeterlilik Testi - Temel Bilgiler Çevrimiçi java ravent testi

Testuvannya zavzhd buvaє olmaktan uzak, eğleniyoruz ve tsіkavim. Tsey süreci zvchichay dosit trivaly ve monoton çalışmanın bir saat tekrarı. Görünüşe göre son zamanlarda programcılar Java sınıfını test etmek için standart visnovka veya hata ayıklayıcı kullanıyorlardı.

Bu yazıda, test yazma sürecini otomatikleştirmeye yardımcı olması için JUnit 4 kütüphanesini anlatacağım.

JUnit Framework'ün temel yeteneklerini göstermek için ilkel bir Java sınıfı yazalım ve onu tanıyalım. Bu matime sınıfının iki yöntemi vardır - sonsuz bir sayının faktöriyelinin önemi ve iki sayının toplamı. Ayrıca sınıfın kopyasında viklikiv yöntemlerinin bir kopyası olacaktır.

Genel sınıf MathFunc ( int çağrıları; genel int getCalls() ( çağrıları döndürür; ) genel uzun faktöriyel(int sayı) ( çağrılar++; if (sayı 1) ( for (int i = 1; i)

Şimdi Unit testini yazalım. Kimler için çok sayıda test yönteminden bir sınıf oluşturuyoruz. Açıkçası, sınıf intikam ve standart ek yöntemler olabilir. Koşucu testlerinin kim, kim, test yöntemlerini anında belirleyebilmesi için @Test notunun işaretlenmesi gerekir.

Ek açıklamalara aşağıdaki parametreler verilebilir:

  • beklenen - yöntem tarafından ne tür bir göz kırpma oluşturulacağını belirtin (aşağıda div. butt);
  • zaman aşımı - milisaniye cinsinden belirli bir saatten sonra testi teste sabitleyin ve başarısız bir test gibi zarahuvat yapın.

İlk testin atlanması gerektiğini belirtmek istiyorsanız, bunu @Ignore notu olarak işaretleyin. İsterseniz @Test komutunu silebilirsiniz.

Örneğin, dış görünüm testi komut dosyası için bir şarkı bağlamına ihtiyacınız var, örneğin, sınıf örneği oluşturma biriktirme listesi. Ve bundan sonra, ayrılmış kaynakları kontrol etmek gerekir. @Before ve @After ek açıklamasına ihtiyacınız olduğunu düşünüyorsunuz. @Önce olarak işaretlenen yöntemi cilt testi düşüşü takip edecek ve @After ile işaretlenen yöntemi cilt testi düşüşü izleyecektir.

Bu seviyedeki kaynakların başlatılmasının yanı sıra, sadece bir kez - tüm testlerden sonra - çalışmak ve ardından birkaç @BeforeClass ve @AfterClass ek açıklama kazanmak gerekir.

Ve i ekseninin kendisi, dekіlkom'dan test senaryoları içeren bir test sınıfıdır:

Genel sınıf MathFuncTest ( özel MathFunc matematik; @Before public void init() ( matematik = new MathFunc(); ) @After public void gözyaşıDown() ( matematik = null; ) @Test public void çağrıları() ( assertEquals(0, matematik) .getCalls()), math.factorial(1); assertEquals(1, math.getCalls()); math.factorial(1); ( assertTrue(math.factorial(0) == 1); assertTrue(math.factorial (1) == 1); assertTrue(math.factorial(5) == 120); ) @Test(beklenen = IllegalArgumentException.class) public void factorialNegative() ( math.factorial(-1); ) @Ignore @Test public void todo() ( assertTrue(math.plus(1, 1) == 3); ) )

Çağrılar yöntemi, zil sesinin doğruluğunu test eder. Faktöriyel yöntem, belirli standart değerler için faktöriyel hesaplamanın doğruluğunu kontrol eder. FactorialNegative yöntemi, faktöriyelin negatif değerleri için bir IllegalArgumentException oluşturacağını geçersiz kılar. Yapılacaklar yöntemi yoksayılacak. Kodu deniyorsanız @Ignore ek açıklamasını temizlemeyi deneyin.

AssertTrue yöntemi sonucun doğrulanıp doğrulanmadığını kontrol eder. Deyakі іnshі yöntemleri, yakі lehte olabilir:

  • assertEquals - sonucun doğrulanması ve sonucun çıkarılması oluşturulur;
  • assertNull - virüs sonucu boş;
  • assertNotNull - vіdminny vіd vіd vіd vіd virazu sonucu;
  • AssertSame - tek ve aynı nesne tarafından nesne doğrulama ve reddetme.
  • fail - suçlama oluşturma yöntemi AssertionError - program başlığının hatası olmadığı durumlarda dodaemo.

bizim şimdiki dünyaya Bir IDE, bir projede testlerin nasıl çalıştırılacağını bilir. Ne yazık ki, program koduyla ilgili yardım için bunları manuel olarak çalıştırmak istiyorsanız. Runner "om'u kimin için hızlandırabilirsiniz. Metin kullanın - junit.textui.TestRunner, grafik sürümleri - junit.swingui.TestRunner, junit.awtui.TestRunner.

Ancak daha modern yöntem, JUnitCore sınıfıyla aynıdır. MathFuncTest sınıfına bir sonraki ana yöntemi ekleyin:

Public static void main(String args) İstisna atar ( JUnitCore koşucusu = new JUnitCore(); Sonuç sonucu = runner.run(MathFuncTest.class); System.out.println("testleri çalıştır: " + result.getRunCount()); System.out.println("başarısız testler: " + result.getFailureCount()); System.out.println("yok sayılan testler: " + result.getIgnoreCount()); System.out.println("success: " + sonuç .başarılıydı()); )

І vikonanny'nin sonucu:

Çalıştırma testleri: 3 başarısız test: 0 yok sayılan test: 1 başarılı: doğru

Daha erken sürümler JUnit bir test sınıfı yazmak için, junit.framework.TestCase dosyasını açmanız gerekir. Daha sonra, bir String parametresi olarak kabul eden bir kurucu atamak gerekiyor - yöntemi adlandıracağım - ve onu babanın sınıfına ileteceğim. Test yönteminin dış görünümü, test önekinden başlamaktan suçludur. Kaynakların başlatılması ve ölçeklendirilmesi için kurulum ve yırtma yöntemleri kullanıldı. Kısacası, vay. Eh, şimdi her şey basit, doğru.

Eksen i tüm yıl. Berbat, JUnit Framework size yardımcı olacak şeyler açısından zengindir. Yorumlar ve beslenme istatistiklerle ilgilidir.

JBirimi- Java programlarının birim testi için kitaplık. Kent Beck ve Eric Gamma tarafından oluşturulan JUnit, köklerini Kent Beck'in SUNit for Smalltalk'ından alan çeşitli programlama dilleri için aynı xUnit çerçevelerine dayanmaktadır. JUnit, bir uzantı ekosistemi oluşturuyor - JMock, EasyMock, DbUnit, HttpUnit, vb.

kütüphane JBirimi bula, PHP (PHPUnit), C# (NUnit), Python (PyUnit), Fortran (fUnit), Delphi (DUnit), Free Pascal (FPCUnit), Perl (Test::Unit), C++ ( CPPUnit), Flex (FlexUnit), JavaScript (JSUNit).

JBirimi- Bu, test etmek için bir Java çerçevesidir, bu nedenle, örneğin yöntemler veya sınıflar gibi birçok kodu test edin. Dosvid, çalışma saatinin JUnit'ten düşülmesi, test konseptlerinin geliştirilmesinde önemli yazılım.

popo testi JBirimi

org.junit.Test'i içe aktarın; junit.framework.Assert'i içe aktar; public class MathTest ( @Test public void testEquals() ( Assert.assertEquals(4, 2 + 2); Assert.assertTrue(4 == 2 + 2); ) @Test public void testNotEquals() ( Assert.assertFalse(5 = = 2 + 2);))

JUnit wiki ihtiyacı

JUnit, kodu her an değiştirmenize olanak tanır. Program daha da basit olmaktan çıkarsa ve anonim sınıflar ve yöntemler içeriyorsa, yeniden doğrulama için önemli bir saat gerekebilir. Açıkçası, tüm süreç daha hızlı bir şekilde otomatikleştirilebilir. Vikoristannya JBirimiönemli bir zusil olmadan programın kodunu yeniden yazmanıza izin verir ve çok fazla zaman almaz.

ünite testi sınıflar ve işlevler ve kendi belgelerine, incelemelerinin sonuçlarında tanınmadan önce. Ve sadece belgeler değil, belgeler, böylece sunulan işlevlerle tutarlılık için kodu otomatik olarak kontrol edebilirsiniz. Tse zruchno ve genellikle rozroblyayat'ı bir zaman olarak test edin, bu yüzden sınıfın uygulanmasından önce. Test yoluyla geliştirme, ciddi yazılım güvenliği oluşturmak için çok popüler bir teknolojidir.

Sınıflandırıcıda o yerdeki testi görün JUnit testi

Yazılım testi iki türe ayrılabilir:

  • testuvannya siyah ekran;
  • beyaz ekranları test etmek.

Programı siyah bir ekran gibi test etme saatinin altında, programın iç yapısına saygı duyulması kabul edilmez. Bir program gibi anlamlı, işlevsel olabilen her şey güvenli olabilir. Bir kutu gibi programları test ederken, iç yapıya saygı duyulur, yani. yöntemler sınıfı. Krym tsgogo, testuvannya chotiri'ye eşit olarak bölünebilir:

  • test birimi - okremih kodunun test edilmesi;
  • entegrasyon testi - karşılıklı modalite ve ortak robotik bileşenlerin testi;
  • sistem testi - tüm sistemin bir bütün olarak test edilmesi;
  • birincil test - vimogamların yaşayabilirliği için bitmiş sistemin alt torba testi.

Beyaz ekranların atanması ve test edilmesi için test birimi.

Birim testi için iki seçenek vardır - JUnit 3 ve JUnit 4. Eski projeler Java 1.4'ü destekleyen 3. sürüme sahip olduğundan, sorunlu sürümlere bakabiliriz.

JÜnite 3

Bir test oluşturmak için TestCase test sınıfını eski sürüme geçirin, kurulum ve yırtma yöntemlerini gerektiği gibi yeniden tanımlayın ve en önemlisi, "test" kısaltması kullanılarak adlandırılabilecek test yöntemlerini genişletin. Test başlatıldığında, anında test sınıfının bir örneği oluşturulur (sınıftaki bir dış görünüm testi için, sınıfın bir örneğidir), ardından setUp yöntemi dövülür, testin kendisi çalıştırılır ve ardından yırtma yöntemi sonuna kadar dövülür. Sanki herhangi bir suçlama yöntemi varmış gibi, testin başarısız olduğu kabul edilir.

Not: Test yöntemleri genel geçersiz olmalıdır, statik olabilir.

Testler, vikonnannya şarkı kodu ve yeniden doğrulamadan oluşur. Perevіrki, yardım sınıfı için çoğunlukla vykonuyutsya iddia etmek Assert anahtar sözcüğünü değiştirmek istiyorum.

Örnek olarak, boş bir satırı yeniden kontrol etme ve 16 satırlık bir satırda bir bayt dizisi verme yöntemlerini içeren satırlı robotlar için yardımcı programa bakabiliriz:

Genel sınıf JUnit3StringUtilsTest, TestCase'i genişletir ( private final Map toHexStringData = New HashMap(); korumalı void setUp(), İstisna atar ( toHexStringData. put("", New byte); 13, 17, 45, 127)); açık(); ) public void testToHexString() ( for (Iterator iterator = toHexStringData.keySet().iterator(); iterator.hasNext();) ( final String beklenen = (String)iterator.next(); son bayt testData = (byte) toHexStringData.get(beklenen); final String fiili = StringUtils.toHexString(testData); assertEquals(beklenen, gerçek); ) ) //... )

Ek yetenekler, TestSuite

JUnit 3 Mayıs ek yetenekler. Örneğin, viprobuvannya'yı gruplayabilirsiniz. Kimin için bir sınıf kazanmak gerekli Test odası:

Genel sınıf JUnit3StringUtilsTestSuite, TestSuite'i genişletir ( public JUnit3StringUtilsTestSuite() ( addTestSuite(StringUtilsJUnit3Test.class); addTestSuite(OtherTest1.class); addTestSuite(OtherTest2.class); ) )

Testi birkaç kez tekrarlayabilirsiniz. RepeatedTest'i kimin kazanacağı:

Genel sınıf JUnit3StringUtilsRepeatedTest, RepeatedTest'i genişletir ( public JUnit3StringUtilsRepeatedTest() ( super(new JUnit3StringUtilsTest(), 100); ) )

ExceptionTestCase gibi bir test sınıfını devralarak, wikideexclusion'daki kodu yeniden düzenleyebilirsiniz:

Genel sınıf JUnit3StringUtilsExceptionTest, ExceptionTestCase'i genişletir ( public JUnit3StringUtilsExceptionTest(final String name) ( super(name, NullPointerException.class); ) public void testToHexString() ( StringUtils.toHexString(null); ) )

Uygulamalardan da görebileceğiniz gibi, her şeyi yapmak kolay ve yazacak bir şey yok - en azından JUnit testi için kod.

JÜnite 4

JUnit 4, Java 5.0 için yeni özellikler ekledi; Test kullanıcıları ek açıklamalara açık olabilir. Herhangi bir zamanda, çerçevenin önceki sürümünden çok fazla kafa karışıklığı var. Bu arada, yeni sürümde yeni olan JUnit 4 Crime RepeatedTest'te bakılan ve uygulanan her şey uygulanacaktır.

JUnit 4'te hangi değişiklikler ortaya çıktı? En popoya bir göz atalım ve sonra tekrar yeni olasılıklarla:

Genel sınıf JUnit4StringUtilsTest, Assert'ı genişletir (özel nihai Harita toHexStringData = yeni HashMap (); @Before public static void setUpToHexStringData() ( toHexStringData.put(", new byte); toHexStringData.put("01020d112d7f", new byte(1,2,13,17,45,127)); toHexStringData.put("10f , new byte(0,-1,-14,17,-128)); //... ) @After public static void gözyaşıDownToHexStringData() ( toHexStringData.clear(); ) @Test public void testToHexString() ( (Harita için) .Giriş giriş: toHexStringData.entrySet()) ( son bayt testData = input.getValue(); beklenen son String = input.getKey(); final String gerçek = StringUtils.toHexString(testData); assertEquals(beklenen, gerçek); ) )

JUnit 4'te neler değişti?

  • Affetmek için, sınıfta çalışma azaltılabilir iddia etmek neobov'yazkovo istiyorum.
  • Soyut @Önce testlerin galiplerinden önce çağrılacak yöntemler anlamına gelir. Methodi yapmak buti Kamu geçersiz. Burada test için ön ayarları duyacaksınız, aynı zamanda test verilerinin oluşturulması (yöntem setUpToHexStringData).
  • Talimatı kazanabilirsin @Dersten önce yöntemlerin nasıl belirleneceği, test sınıfının bir kopyası oluşturulmadan önce nasıl çağrılacakları; suçluluk yöntemleri genel statik boşluk. Verilen talimatlar (yöntem) bir seferde test için vikoristovuvaty maє sens, eğer test sınıfı test edilebilirse, vikoristovuyut farklı ön ayarlar veya bir test vekili testi tek başına yapılırsa, daha sonra cilt testi için saatlik silme.
  • Soyut @Sonrasında yöntemleri belirleyin, vikonannya testіv'den sonra viklikanі. Methodi yapmak buti Kamu geçersiz. Burada, testten sonra kaynağın çalışmasına izin verilir; vipad'imiz için - test verilerinin saflaştırılması (yöntem gözyaşıDownToHexStringData).
  • Soyut @Dersten sonra zmіstom z için pov'azana @Dersten önce ale vikonuє metotları sınıfı test ettikten sonra. Yak ben vipadku z @Dersten önce, suçluluk yöntemleri genel statik boşluk.
  • Soyut @Ölçek test yöntemlerini belirler. Daha önce olduğu gibi, buti yıkamak için yöntem Kamu geçersiz. Burada revizyonların kendileri yayılmıştır. Ek olarak, bu talimatta, beklenen iki parametreyi kazanabilirsiniz - alıntı sayısını ve zaman aşımını ayarlayın - testin başarısız olacağı şekilde değerlendirileceği saati ayarlayın.

Parametrelerle özel bir açıklama uygulayın, JUnit Testi:

@Test(beklenen = NullPointerException.class) public void testToHexStringWrong() ( StringUtils.toHexString(null); ) @Test(timeout = 1000) public void infinity() ( while (true); )

JUnit Yoksay

Testlerden biri olarak, ciddi bir nedenden dolayı açmak gerekiyor, örneğin test yavaş yavaş bir af ile tamamlanıyor. Testin düzeltilmesi, hafif bir gelecek açıklamasına konulabilir @Görmezden gelmek. Bu talimatı bir sınıfa yerleştirirseniz, o sınıftaki tüm testler dahil edilecektir.

@Ignore @Test(timeout = 1000) public void infinity() ( while (true); )

Dövme kuralları, JUnit Kuralı

JBirimi Testi bir sonraki bitirene kadar kuralların listesiyle şarkıları yenmenize izin verir, bu da işlevselliği genişletir. Örneğin, test için zaman aşımı (Zaman Aşımı), suçlama noktalarını (ExpectedException), zaman dosyaları (TemporaryFolder) ve int ile çalışmak için zaman aşımını ayarlamak için kurallar vardır.

Kuralların sağırlaştırılması için, yaratmak gerekir. halka açık olumsuzluk statik yardım anahtar sözcüğü için benzer türde MethodRule ve ek açıklama yogo türüne alan kural.

Genel sınıf JUnitOtherTest ( @Rule public final TemporaryFolder folder = New TemporaryFolder(); @Rule public final Timeout timeout = New Timeout(1000); @Rule public final ExpectedException thrown = ExpectedException.none(); @Ignore @ ) ( while (true ); ) @Test public void testFileWriting(), IOException'ı atar ( final File log = folder.newFile("debug.log"); final FileWriter logWriter = new FileWriter(log); logWriter.append("Merhaba, "); logWriter. append("World!!!"); logWriter.flush(); logWriter.close(); ) @Test public void testExpectedException(), IOException ( thrown.expect(NullPointerException.class); StringUtils.toHexString (null); ) atar )

Test paketi, JUnit Suite, SuiteClasses

Testin çalıştırılması, ek açıklamalar için geliştirilebilir @RunWith. Kendi test yöntemlerinizle kullanabileceğiniz test sınıfları, test kitlerinden (Suite) alınabilir. Örneğin, iki test nesnesi sınıfı oluşturulmuştur: TestFilter, TestConnect. Bu iki test sınıfı, TestWidgets.java test sınıfında birleştirilebilir:

Paket com.nesneleri; org.junit.runner.RunWith'i içe aktarın; org.junit.runners.Suite'i içe aktarın; @RunWith(Suite.class) @Suite.SuiteClasses (( TestFilter.class, TestConnect.class )) genel sınıf TestWidgets ()

Test puanlarını iyileştirmek için @SuiteClasses notu dahil edilmiştir, testler sınıfa dahil edilmiştir.

Soyut Kategoriler

Soyut Kategoriler testleri bir kategoride (grupta) birleştirmenizi sağlar. Testin kategorisi kimlere aittir? @Kategori, ardından Suite'te başlatılan test kategorileri ayarlanır. Bunun gibi görünebilirsin:

Genel sınıf JUnitStringUtilsCategoriesTest Assert'i genişletir ( //... @Category (Unit.class) @Test public void testIsEmpty() ( //... ) //... ) @RunWith(Categories.class) @Categories.IncludeCategory ( Unit.class) @Suite.SuiteClasses (( JUnitOtherTest.class, JUnitStringUtilsCategoriesTest.class )) genel sınıf JUnitTestSuite()

Soyut, JUnit Parametreli

Soyut parametreli parametreli testlerin test edilmesini sağlar. Bunun için test sınıfında, sınıf kurucusuna argüman olarak kullanılacak bir veri listesini döndüren statik bir yöntem vardır.

@RunWith(Parameterized.class) genel sınıf JUnitStringUtilsParameterizedTest Assert'i genişletir ( private final CharSequence testData; özel final boole değeri bekleniyor; public JUnitStringUtilsParameterizedTest(final CharSequence testData, final boole değeri bekleniyor) ( this.testData = test public void testIsEmpty) StringUtils.isEmpty(testData); assertEquals(beklenen, gerçek); ) @Parameterized.Parameters genel statik Liste isEmptyData() ( return Arrays.asList(new Object ( ( null, true ), ( "", true ), ( " ", false ), ( "bazı dize", false ), )) )

Yöntem parametreleştirme: Theories.class, DataPoints, DataPoint, Theory

Soyut teoriler yapıcıyı değil, test yöntemini parametreleştirir. Dani yardım için atandı @Veri noktalarıі @Veri noktası, test yöntemi - yardım için @teori. Bir tür işlevsellik olan bir test şöyle görünebilir:

@RunWith(Theories.class) genel sınıfı JUnitStringUtilsTheoryTest, Assert'ı genişletir ( @DataPoints genel statik Object isEmptyData = new Object ( ("", true ), ( " ", false ), ( "some string", false ), ); @DataPoint public static Object nullData = new Object ( null, true ); @Theory public void testEmpty(final Object... testData)

test sırası

Testi önce sıralamak gerekirse, JUnit 4.11 tarafından sunulan @FixMethodOrder(MethodSorters.NAME_ASCENDING) ek açıklamasıyla hızlandırabilirsiniz. Örneğin:

@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class MyTest ( @Test public void test01()(...) @Test public void test02()(...) ... @Test public void test09()(...) )

Başka bir turda, sonraki 2 adımı geçebilirsiniz.

Geçersiz test01(); geçersiz test02(); ... geçersiz test09(); @Test public void testOrder1() ( test1(); test3(); ) @Test(beklenen = Exception.class) public void testOrder2() ( test2(); test3(); test1(); ) @Test(beklenen = NullPointerException.class) public void testOrder3() ( test3(); test1(); test2(); )

@ Test public void testAllOrders() ( for (Nesne örneği: permute(1, 2, 3)) ( for (Nesne dizini: örnek) ( anahtar (((Tamsayı) dizini).intValue()) ( durum 1: test1( ); ara; durum 2: test2(); ara; durum 3: test3(); ara; ) ) )

Ana açıklamaların listesi

SoyutTanım
@Ölçek
genel geçersiz testMethod()
yöntem test edilebilir
@Test(zaman aşımı=100)
genel geçersiz testMethod()
süre biterse, zaman aşımı parametresi geçersiz kılınır, test yakında tamamlanmayacaktır.
@Test(beklenen = MyException.class)
genel geçersiz testMethod()
yöntem, viking yapmaktan ve MyException sınıfını suçlamaktan suçludur, aksi takdirde test çok yakında tamamlanmayacaktır.
@Görmezden gelmek
genel geçersiz testMethod()
test yöntemini yoksay
@Dersten önce
test yöntemlerini çağırmadan önce bir sınıf için bir kez çağrılan bir yöntem; burada bir başlatma yerleştirmek mümkündür, böylece yalnızca bir kez kazanmak gerekir, örneğin verileri okumak, böylece test yöntemlerinde kazanacaklar veya veri tabanı ile bir veritabanı oluşturacaklar
@Dersten sonra
genel statik geçersiz testMethod()
test yöntemleri çağrıldıktan sonra bir sınıf için bir kez çağrılan bir yöntem; burada başlatmayı kaldırmayı genişletmek mümkündür, böylece yalnızca bir kez tamamlamak gerekir, örneğin verileri veri tabanıyla kapatmak veya artık gerekmediğinden verileri silmek
@Önce
public static void BeforeMethod()
test sınıfında cilt testi yönteminden önce çağrılan yöntem; burada gerekli başlatmayı visconat yapabilirsiniz, örneğin parametreleri ayarlayın
@Sonrasında
genel statik boşluk afterMethod()
test sınıfında cilt testi yönteminden sonra çağrılan yöntem; burada, daha fazlasına ihtiyacınız olmadığı için, örneğin verileri kaldırmak için gerekli başlatmasızlaştırmayı visconat yapabilirsiniz.

Varlık türlerinin listesi

İnceleme türüTanım
başarısız()
başarısız(Dize mesajı)
bir af ile perevannya testi, tobto. test başarısız olacak
assertTrue(boole koşulu)
assertTrue(java.lang.String mesajı, boole koşulu)
zihinlerin sakinliği için yeniden kontrol etme koşul değeri doğru
assertFalse(boole koşulu)
assertFalse(Dize mesajı, boole koşulu)
uygunluk için yeniden kontrol et zihin koşul değeri yanlış
assertEquals(<тип>beklenen,<тип>gerçek)
assertEquals(Dize mesajı,<тип>beklenen,<тип>gerçek)
uygunluk için tekrar kontrol edin;<тип>- ce Object, int, double і vb.
assertArrayEquals(bayt beklenenler, bayt gerçekleri)
assertArrayEquals(Dize mesajı,<тип>beklentiler,<тип>gerçekler)
eşitlik için dizilerin yeniden doğrulanması; assertEquals'e benzer;<тип>- ce Object, int, double і vb.
assertNotNull(nesne nesnesi)
assertNotNull(Dize mesajı, Nesne nesnesi)
Object'in boş olmadığını kontrol edin
assertNull(nesne nesnesi)
assertNull(Dize mesajı, Nesne nesnesi)
Nesnenin boş olduğunu kontrol edin
assertSame(Nesne bekleniyor, Nesne gerçek)
assertSame(Dize mesajı, Nesne bekleniyor, Gerçek nesne)
beklenen ve gerçek iki nesnenin eşitliğinin yeniden doğrulanması, tobto. tek ve aynı nesne

JUnit popo testi

JUnit'in temel olanaklarını göstermek için, iki yöntemi olan ilkel Java sınıfı FuncMath'i kullanıyoruz - sonsuz bir sayının faktöriyelinin değeri ve iki sayının toplamı. Ayrıca sınıfın kopyasında viklikiv yöntemlerinin bir kopyası olacaktır.

Genel sınıf FuncMath ( int çağrılar; genel int getCalls() ( çağrıları geri döndür; ) genel uzun faktöriyel(int sayı) ( çağrılar++; if (sayı)< 0) throw new IllegalArgumentException(); long result = 1; if (number >1) ( için (int i = 1; i< = number; i++) result = result * i; } return result; } public long plus(int num1, int num2) { calls++; return num1 + num2; } }

Dış görünüm testi senaryosuna ek olarak, örneğin sınıf örneklerinin oluşturulmasının arkasında gerekli bağlam gereklidir. Ve bundan sonra, ayrılmış kaynakları kontrol etmek gerekir. @Before ve @After için bir açıklamam var. @Önce olarak işaretlenen yöntemi cilt testi düşüşü takip edecek ve @After ile işaretlenen yöntemi cilt testi düşüşü izleyecektir. Bu düzeydeki kaynakların başlatılmasının yanı sıra, onu yalnızca bir kez geliştirmek - yalnızca tüm testlerden sonra - ardından birkaç @BeforeClass ve @AfterClass notu kazanmak gerekir.

Kilcom senaryolu test sınıfı şöyle görünür:

org.junit.Test'i içe aktarın; org.junit.After'ı içe aktarın; org.junit.Before'yi içe aktarın; org.junit.Assert'i içe aktar; org.junit.AfterClass'ı içe aktar; org.junit.BeforeClass'ı içe aktar; public class JUnit_funcMath Assert'i genişletir ( private FuncMath matematik; @Before public void init() ( matematik = new FuncMath(); ) @After public void gözyaşıDown() ( matematik = null; ) @Test public void çağrıları() ( assertEquals(" math.getCalls() != 0", 0, dao.getConnection()); math.factorial(1); assertEquals(1, math.getCalls()); math.factorial(1); assertEquals(2, matematik. getCalls()); ) @Test public void factorial() ( assertTrue(math.factorial(0) == 1); assertTrue(math.factorial(1) == 1); assertTrue(math.factorial(5) == 120);) @Test(beklenen = IllegalArgumentException.class) public void factorialNegative() ( math.factorial(-1); ) @Ignore @Test public void todo() ( assertTrue(math.plus(1, 1) == 3);

Çağrılar yöntemi, zil sesinin doğruluğunu test eder. Faktöriyel yöntem, belirli standart değerler için faktöriyel hesaplamanın doğruluğunu kontrol eder. FactorialNegative yöntemi, faktöriyelin negatif değerleri için bir IllegalArgumentException oluşturacağını geçersiz kılar. Yapılacaklar yöntemi yoksayılacak.

Örneğin, makalenin genel JUnit bağlamında sunulduğunu belirtin. Ancak, uygulamaların rehberliğinden de görebileceğiniz gibi, çerçevenin zaferlerde elde edilmesi kolaydır, çok fazla ek olasılık yoktur, ancak kuralların ve fırlatıcıların ötesine geçmek de mümkündür.

PZ'nin geliştirilmesinin daha çok, daha az iş olduğunu biliyorum. Kendim, her gün daha iyi olmaya çalışan bir zanaatkarla çalışıyorum. Herkes için en kolay yol çaçayı bilmektir. iyi araçlar bir sonraki öğün için şu tavsiye:

  • Muzaffer X aracından suçluysam?
  • Muzaffer X aracından nasıl suçluyum?

Otomatik test, yazılım geliştirmenin önemli bir parçasıdır, ancak programcıların bloglarında, test edilen araçlar hakkında üç gönderi vardır. Neden, "araçlarla ekranıma" bakmanıza izin vereyim. Birim ve entegrasyon testleri yazmak için bir hack'mişim gibi 12 kitaplık ve çerçeveden bahsedeceğim ve ayrıca size yanlarda biraz yardım vereceğim, böylece onları nasıl hackleyeceğinizi anlamanıza yardımcı olabilirim.

Araç kutuma bir göz atalım

Bundan önce, araçlara verilen açıklamayı değiştirebildiğiniz için, entegrasyonu ve birim testlerini otomatik olarak başlatıyormuş gibi katlamayı ayarlamaktan siz sorumlusunuz. Bu konuyla ilgili є 2 notum var:

  • Maven entegrasyon testi, farklı dizinlerde entegrasyon ve birim testleri ile Maven katlamayı nasıl özelleştirebileceğimizi açıklar.
  • Gradle Start: TestSets eklentisi ile entegrasyon testi, Gradle için olanları açıklar.

Artık aletlerime hayran kalmaya hazırsınız. Bunları kategorilere ayırdım, böylece gezinmeniz daha kolay olurdu.

Ayrıca, entegrasyon ve birim testi ile güçlü gibi 12 aracın ekseni.

Çalışan testler

AssertJ, aflar hakkında sağlam bir açıklama yazmak için esnek bir API sağlar, test kodunun okunabilirliğini artırır, alan odaklı filmler için gerektiği gibi testleri, yazılan özellikler üzerinde yeniden yazmanıza olanak tanır.

Dodatkovo:

  • Test amaçlı Hamcrest hack'i, testler yazmak için Hamcrest'i nasıl hackleyeceğinizi ve ayrıca yeteneklerini ek çekirdek modüllerle nasıl genişleteceğinizi.
  • İddiayı, AssertJ'de bir coristuvach iddiasını yaratır gibi, özne odaklı bir gelişim diline dönüştürüyoruz.
  • Temiz yazıyoruz: sertliği konu odaklı bir madenle değiştirmek. Rozpovіdaє neden standart JUnit sertliğini muzaffer virnu konu odaklı dil gibi kelimelerle değiştirmekten suçluyuz.

Veri erişim kodu testi

Veritabanı kodu, perakendecinin yerel makinesinde yürütülen entegrasyon testleri yazmak için tasarlanmıştır.

Cilt entegrasyon testini gerçekleştirmeden ve veritabanını gerekli verilerle doldurmadan önce yönetimde veritabanının başlatılması için başvurabilmeniz için JUnit için bir uzantı. DbUnit'in eksiklikleri vardır, ancak aynı zamanda test verilerini ve test kodunu paylaşmanıza izin veren temel bir araçtır.

Dodatkovo:

  • DbUnit'in temel bileşenlerini, ek DbUnit ile gerekli tüm yazma testlerinin bilgisini açıklar.
  • nada 5 yazma kuralı en iyi testler veri erişim kodu.

Java - 1991'de Sun Microsystems tarafından dağıtılan nesne yönelimli, kesin olarak yazılan dil programlaması. Başlangıçta Oak olarak adlandırılan dil, hareket halindeyken elektronik programlama için kullanıldı, ancak daha sonra Java olarak yeniden adlandırıldı. Java'nın 1995 yılındaki resmi sürümünün daha da başarılı olduğu ortaya çıktı ve yeni dilden çok kısa bir süre sonra Java, sunucu eklentileri geliştirmek için bir araç olarak güçlü bir pozisyon aldı.

Çağımızda Java, yazılım geliştirmenin tüm alanlarında - sunucu programları, masaüstü programları, araçlar, web eklentileri - kazanıyor - her şey Java ve tartışmalı teknolojilerin yardımı için geliştiriliyor.

Java Testi için Hedef Kitle

Gücü test etmek için Java'yı test edin, minimum Java programlama bilgisi ile daha fazla perakendeci tanıdığınızı kanıtlayın. Java ile çok fazla çalışmayı düşünemeyen ve bu konuda minimum uyarı almak isteyen bu kadar kişi için test daha zengin olacaktır. temel konseptler bu popüler movi programlamadır. Ayrıca, bu test, Java öğrenmek, bilgiyi pekiştirmek, VNZ'den uzaklaşmak veya bağımsız çalışmanın bir sonucu olarak öğrencilere tanıdık gelebilir.

Java Testine Yönlendir

Java'nın temellerinden testi geçmeden önce, "değişim", "döngü", "yöntem" gibi temel kavramları zaten biliyorsunuz ve ana modern yapıların sözdizimini biliyorsunuz. Değilse, giriş kursunu okuyarak Java'nın temellerini öğrenmenizi öneririz.

Java Test Yapısı

"Java - Temel Bilgiler" testi aşağıdaki konular kapsamındadır:

Aşağıdaki gıda testi konularıyla ilgili bir raporu okuyabilirsiniz:

  • O sınıfın nesneleri: Konunun gıdası, bir sınıf, bir sınıfın örneği (nesne), bir kurucu, bir yöntem ve bir sınıfın alanı olarak anlaşılacak şekilde işlenir.
  • Sözdizimi: Bu bölümün gücü, hareketin anahtar sözcükleri, operatörler, temel türler (ilkeller, String), kontrol edilecek yapılar (if-else, while, for) ve işleme anlayışını gözden geçirmektir. suçlu durumların (İstisna).
  • Ek olarak: tsey razdіl intikam schodo temelleri, terimleri ve kısaltmaları, adlandırma sınıflarının kurallarını anlama, bu yöntemleri değiştirme. Ayrıca her dağıtım için farklı dosya kaynakları (.java, .class, .jar) ve paketler, nesnelerin yaşam döngüsü, depolama koleksiyonu (çöp toplama) vardır.

Çevrimiçi bir Java testi yapmak, Java'nın temelleri hakkındaki bilginizi gözden geçirmenize ve pekiştirmenize yardımcı olur ve ayrıca Java test dağıtımından daha gelişmiş testler yapmanızı sağlar.

umalım Danimarka testi küfür edip ağlayacaksın.

Java testinin daha da geliştirilmesi

Java testi sürekli olarak yeni yiyeceklerle güncellenmektedir.

Quizful ekibinin en yakın planları, Java'da uzman düzeyinde testlerin oluşturulmasıdır. Java Puzzlers testinin oluşturulması mümkündür, ancak ne yazık ki daha uygun bir şekilde yiyecekleri anımsatacaktır.

Hamurun beslenmesine saygınız varsa genel olarak bize yazın. Mutlu ol.

Java programcıları için test görevleri aramak için onları cicavia sitesine gönderdim ( Koristuwacham Avast gitmeyin, bu bir komut dosyası truva atı, aksi takdirde yapabilirsiniz) - http://www.betterprogrammer.com. Java programcılarının niteliklerini en basit şekilde kazanın, o zaman otomatik olarak: hemen hareket eden bazı katlama işlevlerini (yöntemlerini) yazın ve kodu TextArea'ya kopyalayın. Motoru siteye görevlerle çalışması için verdik (aksi halde birim testi gibi değil), "tatlılık-kalite" kriterlerine göre ilk yeterlilik endeksini hesaplayın ve şöyle görünün:

Dali pochinayutsya yemeği. Ben kendim hayatımda aniden Java'da programladım (ve bunun için görevi atladım), bu yüzden testin% 82'si eşit olarak kabul edildi Java olmayan programcı. Java Junior, Java Programmer ve özellikle Java Senior yazmak için kaç kredi?! Hangi sonuç puanlanır Sağ Java programcısı - 90, 95, 99? Ve şimdi, bir buti gibi, bir "programcı" gibi 82'den az yazıyor, ama 82'den daha az bir robot gibi davranmıyor mu?!

Mobil ekler