JUnit yordami uchun Java kodini sinab ko'rish - Qo'llanma. Java proficiency test - asoslar Onlayn java rhubarb testi

Testuvannya biz qiziqarli va tsíkavim bor zavzhd buvaê bo'lishdan uzoqdir. Tsey jarayoni zvchichay dosit trivaly va monoton ish takrorlash soat. Yaqinda dasturchilar standart visnovka yoki java sinfini sinash uchun tuzatuvchidan foydalanishganga o'xshaydi.

Ushbu maqolada men JUnit 4 kutubxonasini tasvirlab beraman, shunda u testlarni yozish jarayonini avtomatlashtirishga yordam beradi.

JUnit Framework ning asosiy imkoniyatlarini namoyish qilish uchun keling, ibtidoiy Java sinfini yozamiz va u haqida bilamiz. Ushbu matime sinfida ikkita usul mavjud - cheksiz sonning faktorialining ahamiyati va ikkita sonning yig'indisi. Bundan tashqari, sinfning nusxasida vikliv usullarining nusxasi bo'ladi.

Ommaviy sinf MathFunc ( int qo‘ng‘iroqlar; public int getCalls() ( qaytar qo‘ng‘iroqlar; ) umumiy uzoq faktorial(int raqami) ( qo‘ng‘iroqlar++; if (1-raqam) ( int i = 1; i uchun)

Endi birlik testini yozamiz. Kim uchun biz ko'p sonli test usullaridan sinf yaratamiz. Shubhasiz, sinf qasos va standart qo'shimcha usullar bo'lishi mumkin. Shunday qilib, yuguruvchi testlari kimni, kimni, test usullarini darhol aniqlashi mumkin va @Test izohini belgilash kerak.

Izohlarga quyidagi parametrlar berilishi mumkin:

  • kutilgan - usul yordamida qanday ko'z qisish paydo bo'lishini belgilang (quyida bo'linish);
  • vaqt tugashi - milisekundlarda ma'lum bir soatdan so'ng, testni sinovga qo'ying va uni muvaffaqiyatsiz sinov kabi zarahuvat qiling.

Agar siz birinchi testni o'tkazib yuborish kerakligini bildirmoqchi bo'lsangiz, uni @Ignore izohi sifatida belgilang. Agar xohlasangiz, shunchaki @Test yo'riqnomasini o'chirishingiz mumkin.

Masalan, sizga teri testi skripti uchun qo'shiq konteksti kerak bo'ladi, masalan, sinf namunasini yaratishda orqada qolgan. Va shundan so'ng, zaxiralangan resurslarni tekshirish kerak. Nima deb o'ylaysiz, @Before va @After izohlari kerak. @Before belgilangan usuldan keyin teri testi tushishi kuzatiladi va @After belgilangan usuldan keyin teri testi tushishi kuzatiladi.

Ushbu darajadagi resurslarni ishga tushirish bilan bir qatorda, uni faqat bir marta ishlab chiqish kerak - faqat barcha testlardan so'ng - keyin bir nechta izohlarni yutib oling @BeforeClass va @AfterClass.

Va i o'qining o'zi test stsenariylari bilan dekylkomning sinov sinfidir:

Ommaviy sinf MathFuncTest ( xususiy MathFunc math; @Before public void init() ( math = new MathFunc(); ) @After public void tearDown() ( math = null; ) @Test public void calls() ( assertEquals(0, math) .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(kutilayotgan = IllegalArgumentException.class) umumiy bekor faktorialNegative() ( math.factorial(-1); ) @Ignore @Test public void todo() ( assertTrue(math.plus(1, 1) == 3); ) )

Qo'ng'iroqlar usuli qo'ng'iroqning to'g'riligini tekshiradi. Faktoriy usul muayyan standart qiymatlar uchun faktorial hisoblashning to'g'riligini tekshiradi. FaktorialNegative usuli faktorialning manfiy qiymatlari uchun IllegalArgumentExceptionni bekor qilishini bekor qiladi. Todo usuli e'tiborga olinmaydi. Agar kod bilan tajriba o'tkazayotgan bo'lsangiz, @Ignore izohini tozalab ko'ring.

assertTrue usuli natijaning tasdiqlanganligini tekshiradi. Deyakí ínshí usullari, yaíí foydasiga aylanishi mumkin:

  • assertEquals - natijani tasdiqlash va natijani ayirish hosil bo'ladi;
  • assertNull - virus natijasi null;
  • assertNotNull - virazu vydminny vyd null natijasi;
  • AssertSame - bir xil ob'ekt tomonidan ob'ektni tekshirish va rad etish.
  • muvaffaqiyatsiz - ayblovlarni yaratish usuli AssertionError - dastur sarlavhasining xatosi bo'lmagan dodaemo.

Bizning hozirgi dunyoga IDE loyihada oddiygina testlarni qanday bajarishni biladi. Afsuski, agar siz dastur kodi bo'yicha yordam uchun ularni qo'lda ishlatmoqchi bo'lsangiz. Kim uchun Runner ni tezlashtirishingiz mumkin "om. Matnni ishlating - junit.textui.TestRunner, grafik versiyalari - junit.swingui.TestRunner, junit.awtui.TestRunner.

Ammo zamonaviyroq usul JUnitCore klassi bilan bir xil. MathFuncTest sinfiga keyingi asosiy usulni qo'shing:

Ommaviy statik bekor asosiy(String args) Istisno (JUnitCore runner = new JUnitCore(); Natija natijasi = runner.run(MathFuncTest.class); System.out.println("testlarni ishga tushirish: " + result.getRunCount()); System.out.println("muvaffaqiyatsiz testlar: " + result.getFailureCount()); System.out.println("e'tiborga olinmagan testlar: " + result.getIgnoreCount()); System.out.println("muvaffaqiyat: " + natija .wasSuccessful()); )

I vikonanny natijasi:

Sinovlarni bajarish: 3 ta muvaffaqiyatsiz test: 0 ta e'tiborga olinmagan test: 1 ta muvaffaqiyatli: rost

Ko'proq dastlabki versiyalari JUnit test klassini yozish uchun junit.framework.TestCase-ni ochishingiz kerak. Keyin String parametri sifatida qabul qiluvchi konstruktorni belgilash kerak - men usulni nomlayman - va uni otaning sinfiga o'tkazaman. Sinov usulining terisi sinov prefiksidan boshlab aybdor. Resurslarni ishga tushirish va masshtablash uchun setUp va tearDown usullari qo'llanilgan. Qisqasi, voy. Xo'sh, endi hamma narsa oddiy, to'g'ri.

Yil davomida eksa i. Crap, JUnit Framework sizga yordam beradigan narsalarga boy. Sharhlar va ovqatlanish statistik ma'lumotlarga tegishli.

JUnit- Java dasturlarini sinovdan o'tkazish uchun kutubxona. Kent Bek va Erik Gamma tomonidan yaratilgan JUnit Kent Bekning SUnit for Smalltalk dasturidan kelib chiqqan turli dasturlash tillari uchun bir xil xUnit ramkalariga asoslangan. JUnit kengaytmalar ekotizimini yaratadi - JMock, EasyMock, DbUnit, HttpUnit va boshqalar.

kutubxona JUnit bula boshqa movslar, jumladan PHP (PHPUnit), C# (NUnit), Python (PyUnit), Fortran (fUnit), Delphi (DUnit), Free Paskal (FPCUnit), Perl (Test::Unit), C++ () tomonidan ko'chirilgan. CPPUnit), Flex (FlexUnit), JavaScript (JSUnit).

JUnit- Bu test uchun Java asosidir, shuning uchun ko'plab kodlarni sinab ko'ring, masalan, usullar yoki sinflar. Dosvid, JUnit-dan ish soatini chegirib tashlash, test kontseptsiyalarini ishlab chiqishda muhim ahamiyatga ega dasturiy ta'minot.

dumba sinovi JUnit

Import org.junit.Test; import junit.framework.Assert; ommaviy sinf MathTest ( @Test public void testEquals() ( Assert.assertEquals(4, 2 + 2); Assert.assertTrue(4 == 2 + 2); ) @Test ommaviy bekor testNotEquals() ( Assert.assertFalse(5 =) = 2 + 2);))

JUnit wiki kerak

JUnit istalgan vaqtda kodni o'zgartirish imkonini beradi. Agar dastur yanada sodda bo'lishni to'xtatsa va anonim sinflar va usullarni o'z ichiga olsa, qayta tekshirish muhim soatni talab qilishi mumkin. Shubhasiz, butun jarayon tezroq avtomatlashtirilishi mumkin. Vikoristannya JUnit muhim zusilsiz dastur kodini qayta yozish imkonini beradi va ko'p vaqt talab qilmaydi.

birlik testi ko'rib chiqish natijalarida tan olinishidan oldin sinflar va funktsiyalar va o'zlarining hujjatlari. Va nafaqat hujjatlar, balki hujjatlar, shuning uchun siz kodni taqdim etilgan funktsiyalarga muvofiqligini avtomatik ravishda tekshirishingiz mumkin. Tse zruchno va tez-tez bir vaqt sifatida rozroblyyat test, shuning uchun í sinf amalga oshirish oldin. Sinov orqali ishlab chiqish - jiddiy dasturiy ta'minot xavfsizligini yaratish uchun juda mashhur texnologiya.

Sinovni o'sha joydagi JUnit testini tasniflagichda ko'ring

Dasturiy ta'minotni sinovdan o'tkazishni ikki turga bo'lish mumkin:

  • qora ekran sinovi;
  • oq ekranlarni sinab ko'rish.

Qora ekran kabi dasturni sinovdan o'tkazish soati ostida dasturning ichki tuzilishi hurmatga qabul qilinmaydi. Dastur kabi mazmunli, funktsional bo'lishi mumkin bo'lgan hamma narsa xavfsiz bo'lishi mumkin. Bir quti kabi dasturlarni sinovdan o'tkazishda ichki tuzilma hurmat qilinadi, ya'ni. usullar sinfi. Krym tsgogo, testuvannya teng chotiri bo'linishi mumkin:

  • test birligi - kodning okremih sonini sinovdan o'tkazish;
  • integratsiya testi - o'zaro modallik va qo'shma robot komponentlarini sinovdan o'tkazish;
  • tizimni sinovdan o'tkazish - butun tizimni bir butun sifatida sinab ko'rish;
  • birlamchi sinov - vimogamlarning hayotiyligi uchun tayyor tizimni sub-bag testi.

Oq ekranlarni tayinlash va sinovdan o'tkazish uchun sinov birligi.

Birlik testi uchun ikkita variant mavjud - JUnit 3 va JUnit 4. Biz noto'g'ri versiyalarni ko'rib chiqishimiz mumkin, chunki eski loyihalar Java 1.4-ni qo'llab-quvvatlaydigan 3-versiyaga ega.

JUnit 3

Sinov yaratish uchun TestCase test sinfini pasaytiring, kerak bo'lganda sozlash va tearDown usullarini qayta belgilang va eng muhimi, "test" qisqartmasi yordamida nomlanishi mumkin bo'lgan test usullarini kengaytiring. Sinov boshlanganda, test sinfining namunasi tezda yaratiladi (sinfdagi teri testi uchun sinfning namunasi), so'ngra o'rnatish usuli uriladi, testning o'zi ishga tushiriladi va tearDown usul oxirigacha uriladi. Go'yo ayblashning har qanday usuli mavjud bo'lsa, sinov muvaffaqiyatsiz bo'lgan deb hisoblanadi.

Eslatma: Sinov usullari umumiy bekor bo'lishi kerak, statik bo'lishi mumkin.

Sinovlar vikonnannya qo'shiq kodidan va qayta tekshirishdan iborat. Perevyrki asosan yordam sinf uchun vykonuyutsya ta'kidlamoq assert kalit so'zini o'zgartirmoqchi.

Misol tariqasida, bo'sh qatorni qayta tekshirish va 16 qatorli baytlar ketma-ketligini berish usullarini o'z ichiga olgan qatorli robotlar uchun yordamchi dasturni ko'rib chiqishimiz mumkin:

Ommaviy sinf JUnit3StringUtilsTest TestCase-ni kengaytiradi (maxfiy yakuniy xarita toHexStringData = Yangi HashMap(); himoyalangan void setUp() Istisnoni tashlaydi (toHexStringData. put("", Yangi bayt); 13, 17, 45, 127)); aniq(); ) public void testToHexString() ( (Iterator iterator = toHexStringData.keySet().iterator(); iterator.hasNext();) ( final String kutilayotgan = (String)iterator.next(); final bayt testData = (bayt) toHexStringData.get(expected); final String actual = StringUtils.toHexString(testData); assertEquals(kutilayotgan, haqiqiy); ) ) //... )

Qo'shimcha imkoniyatlar, TestSuite

Iyun 3-may qo'shimcha imkoniyatlar. Misol uchun, siz viprobuvannya guruhlashingiz mumkin. Kim uchun sinfda g'alaba qozonish kerak TestSuite:

JUnit3StringUtilsTestSuite umumiy klassi TestSuite ( umumiy JUnit3StringUtilsTestSuite() ( addTestSuite(StringUtilsJUnit3Test.class); addTestSuite(OtherTest1.class); addTestSuite(OtherTest2.class); )

Sinovni bir necha marta takrorlashingiz mumkin. RepeatedTestda g'alaba qozonish uchun:

Ommaviy sinf JUnit3StringUtilsRepeatedTest RepeatedTestni kengaytiradi ( umumiy JUnit3StringUtilsRepeatedTest() ( super(yangi JUnit3StringUtilsTest(), 100); ) )

ExceptionTestCase kabi test sinfini meros qilib olgan holda, siz wikidexclusiondagi kodni qayta tahrirlashingiz mumkin:

Ommaviy sinf JUnit3StringUtilsExceptionTest ExceptionTestCase ( umumiy JUnit3StringUtilsExceptionTest(yakuniy String nomi) ( super(nom, NullPointerException.class); ) umumiy bekor testToHexString() ( StringUtils.toHexString(null)) ni kengaytiradi;

Ilovalardan ko'rinib turibdiki, hamma narsani qilish oson va yozish uchun hech narsa yo'q - hech bo'lmaganda JUnit testi uchun kod.

JUnit 4

JUnit 4 Java 5.0 uchun yangi xususiyatlarni qo'shdi; Sinovchilar qo'shimcha izohlar uchun ochiq bo'lishi mumkin. Har qanday vaqtda, ramkaning oldingi versiyasidan juda ko'p chalkashliklar mavjud. Shu bilan birga, ko'rib chiqilgan va qo'llaniladigan barcha narsalar yangi versiyada yangi bo'lgan JUnit 4 Crime RepeatedTest-da qo'llaniladi.

JUnit 4 da qanday o'zgarishlar yuz berdi? Keling, to'g'ridan-to'g'ri dumbani ko'rib chiqaylik, keyin yana yangi imkoniyatlar bilan:

Ommaviy sinf JUnit4StringUtilsTest Assert (xususiy yakuniy xarita toHexStringData = yangi HashMap (); @Ommaviy statik bekor qilishdan oldin setUpToHexStringData() ( toHexStringData.put(", yangi bayt); toHexStringData.put("01020d112d7f", yangi bayt(1,2,13,17,45,127)); toHexStringData0., new(" bayt(0,-1,-14,17,-128)); //... ) @Ommaviy statik bekor qilingandan keyin tearDownToHexStringData() ( toHexStringData.clear(); ) @Test public void testToHexString() ( (Xarita uchun) .Kirish kirish: toHexStringData.entrySet()) (yakuniy bayt testData = entry.getValue(); yakuniy satr kutilmoqda = entry.getKey(); yakuniy satr haqiqiy = StringUtils.toHexString(testData); assertEquals(kutilayotgan, haqiqiy); ) ) )

JUnit 4 da nima o'zgardi?

  • Kechirimlilik uchun sinfda ishni qisqartirish mumkin ta'kidlamoq uni neobov'yazkovo istayman.
  • Abstrakt @oldin sinovlar g'oliblari oldida chaqiriladigan usullarni anglatadi. Buti qilish usuli ommaviy bo'shliq. Bu erda siz test uchun oldindan o'rnatilgan sozlamalarni eshitasiz, shu bilan birga test ma'lumotlarini yaratish (usul setUpToHexStringData).
  • Siz ko'rsatmani yutib olishingiz mumkin @BeforeClass usullarni qanday belgilash kerak, test klassi nusxasini yaratishdan oldin ular qanday chaqiriladi; aybdorlik usullari umumiy statik bo'shliq. Ko'rsatma (usul) hisobga olinsa, test sinfi sinovdan o'tgan bo'lsa, vikoristovuyut turli xil oldindan o'rnatish yoki testlar bir va bir xil ma'lumotlarni vikoristovuvat bo'lsa, ba'zida test uchun vikoristovuvaty his qiladi, teri testi uchun vitrachati soat í̈x aralashtirishni kamaytiradi.
  • Abstrakt @Keyin usullarini belgilash, vikonannya testív keyin viklikaní. Buti qilish usuli ommaviy bo'shliq. Bu erda resursning ishlashi testdan so'ng ruxsat etiladi; bizning vipadimiz uchun - test ma'lumotlarini tozalash (usul tearDownToHexStringData).
  • Abstrakt @AfterClass zmístom z uchun pov'azana @BeforeClass sinfni sinovdan o'tkazgandan so'ng ale vikonuê usullari. Yak i u vipadku z @BeforeClass, aybdorlik usullari umumiy statik bo'shliq.
  • Abstrakt @Test sinov usullarini belgilang. Avvalgidek, buti yuvish uchun tsí usuli ommaviy bo'shliq. Bu erda reviziyalarning o'zi tarqaladi. Bunga qo'shimcha ravishda, ushbu yo'riqnomada siz ikkita parametrni yutib olishingiz mumkin, kutilgan - iqtiboslar sonini va vaqt tugashini belgilang - test muvaffaqiyatsiz bo'lishi uchun soatni belgilang.

Parametrlar bilan maxsus izohni qo'llang, JUnit Test:

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

JUnit Ignore

Sinovlardan biri sifatida, qandaydir jiddiy sabablarga ko'ra, uni yoqish kerak, masalan, sinov asta-sekin afv bilan yakunlanadi. Testni tuzatish kelajakda engil izohga qadar qo'yilishi mumkin @E'tibor bermaslik. Agar siz ushbu ko'rsatmani sinfga joylashtirsangiz, u holda ushbu sinfdagi barcha testlar kiritiladi.

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

Tatuirovka qoidalari, JUnit Rule

JUnit keyingi safar testni tugatmaguningizcha, qo'shiqlarni qoida ro'yxati bilan urish imkonini beradi, bu esa funksionallikni kengaytiradi. Masalan, test uchun vaqt tugashini belgilash (Timeout), aybdor nuqtalarni belgilash (ExpectedException), vaqt fayllari (TemporaryFolder) va int bilan ishlash qoidalari mavjud.

Qoidalarni kar qilish uchun uni yaratish kerak ommaviy emas statik maydonga o'xshash turdagi MethodRule turiga va yordam kalit so'zi uchun yogo izohini kiriting qoida.

Ommaviy sinf JUnitOtherTest ( @Rule public final TemporaryFolder papkasi = New TemporaryFolder(); @Rule public final Timeout timeout = New Timeout(1000); @Rule public final ExpectedException thrown = ExpectedException.none(); @Ignore @ ) ( while (to'g'ri) ); ) @Test public void testFileWriting() IOExceptionni tashlaydi (yakuniy Fayl jurnali = folder.newFile("debug.log"); final FileWriter logWriter = new FileWriter(log); logWriter.append("Salom,"); logWriter. append("Dunyo!!!"); logWriter.flush(); logWriter.close(); ) @Test umumiy bekor testExpectedException() IOException ( thrown.expect(NullPointerException.class); StringUtils.toHexString (null); ) )

Test to'plami, JUnit Suite, SuiteClasses

Sinovni bajarish qo'shimcha izohlar uchun yaxshilanishi mumkin @RunWith. O'z test usullari bilan ishlatilishi mumkin bo'lgan test darslari test to'plamlaridan (Suite) olinishi mumkin. Masalan, test obyektlarining ikkita sinfi yaratilgan: TestFilter, TestConnect. Ushbu ikkita test sinfini bir TestWidgets.java test sinfiga birlashtirish mumkin:

com.objects to'plami; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses (( TestFilter.class, TestConnect.class )) umumiy sinf TestWidgets ()

Test ballarini yaxshilash uchun @SuiteClasses izohi kiritilgan, testlar sinfga kiritilgan.

Abstrakt toifalar

Abstrakt toifalar toifadagi (guruhdagi) testlarni birlashtirish imkonini beradi. Kimlar uchun test toifasiga ega @Kategoriya, shundan so'ng Suite-da ishga tushirilgan testlar toifalari o'rnatiladi. Siz shunday ko'rishingiz mumkin:

Ommaviy sinf JUnitStringUtilsCategoriesTest kengaytiriladi Assert ( //... @Category (Unit.class) @Test public void testIsEmpty() ( //... ) //... ) @RunWith(Categories.class) @Categories.IncludeCategory ( Unit.class) @Suite.SuiteClasses (( JUnitOtherTest.class, JUnitStringUtilsCategoriesTest.class )) ochiq sinf JUnitTestSuite()

Xulosa, JUnit parametrlangan

Abstrakt Parametrlangan parametrlangan testlarni tekshirish imkonini beradi. Buning uchun test sinfida ma'lumotlar ro'yxatini aylantiruvchi statik usul mavjud bo'lib, ular sinf konstruktoriga argument sifatida ishlatiladi.

@RunWith(Parameterized.class) umumiy klassi JUnitStringUtilsParameterizedTest Assertni kengaytiradi ( xususiy final CharSequence testData; shaxsiy yakuniy mantiqiy kutilmoqda; ommaviy JUnitStringUtilsParameterizedTest(yakuniy CharSequence testData, yakuniy mantiqiy kutilmoqda) ( this.testData (yakuniy mantiqiy) testi = test) StringUtils.isEmpty(testData); assertEquals(kutilayotgan, haqiqiy); ) @Parameterized.Parameters umumiy statik roʻyxati isEmptyData() ( qaytaring Arrays.asList(yangi Ob'ekt ( ( null, true ), ( "", true ), ( " ", false ), ( "ba'zi qator", noto'g'ri ), )) ) )

Usulni parametrlashtirish: Theories.class, DataPoints, DataPoint, Theory

Abstrakt nazariyalar konstruktorni emas, balki test usulini parametrlashtiradi. Dani yordam uchun tayinlangan @DataPointsі @DataPoint, test usuli - yordam uchun @Nazariya. Funktsionallikning bir turi bo'lgan test quyidagicha ko'rinishi mumkin:

@RunWith(Theories.class) umumiy klassi JUnitStringUtilsTheoryTest Assertni kengaytiradi ( @DataPoints umumiy statik Object isEmptyData = new Object ( ( "", true ), ( " ", false ), ( "ba'zi string", false ), ); @DataPoint public static Object nullData = new Object ( null, true ); @Theory public void testEmpty (yakuniy ob'ekt... testData)

Sinov o'tkazish tartibi

Agar testni birinchi navbatda tartiblash zarur bo'lsa, JUnit 4.11 tomonidan kiritilgan @FixMethodOrder(MethodSorters.NAME_ASCENDING) izohi yordamida uni tezlashtirishingiz mumkin. Misol uchun:

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

Boshqa burilishda siz keyingi 2 qadamni engishingiz mumkin.

Void test01(); bekor test02(); ... void test09(); @Test ommaviy bekor testOrder1() ( test1(); test3(); ) @Test(kutilayotgan = Exception.class) umumiy bekor testOrder2() ( test2(); test3(); test1(); ) @Test(kutilayotgan = NullPointerException.class) ommaviy bekor testOrder3() ( test3(); test1(); test2(); )

@ Umumiy bekor testAllOrders() ( uchun (Ob'ekt namunasi: permute(1, 2, 3)) uchun (Ob'ekt indeksi: namuna) ( switch (((Integer) indeks).intValue()) ( 1-holat: test1( ); tanaffus; 2-holat: test2(); tanaffus; 3-hol: test3(); tanaffus; ) ) ) )

Asosiy izohlar ro'yxati

AbstraktTavsif
@Test
public void testMethod()
usuli sinovdan o'tkaziladi
@Test (vaqt tugashi = 100)
public void testMethod()
agar vaqt tugagan bo'lsa, vaqt tugashi parametri bekor qilinadi, test yaqinda tugamaydi
@Test (kutilgan = MyException.class)
public void testMethod()
usul viking uchun aybdor va MyException sinfini ayblaydi, aks holda test unchalik uzoq bo'lmagan joyda yakunlanadi.
@E'tibor bermaslik
public void testMethod()
sinov usulini e'tiborsiz qoldiring
@BeforeClass
test usullarini chaqirishdan oldin sinf uchun bir marta chaqiriladigan usul; bu yerda siz ishga tushirishni tartiblashingiz mumkin, shunda siz faqat bir marta g'alaba qozonishingiz kerak, masalan, ma'lumotlarni o'qing, shunda ular test usullarida g'alaba qozonadi yoki ma'lumotlar bazasi bilan ma'lumotlar bazasini yaratadi.
@AfterClass
umumiy statik bekor testMethod()
test usullarini chaqirgandan keyin sinf uchun bir marta chaqiriladigan usul; bu yerda deinitializatsiyani kengaytirish mumkin, shuning uchun faqat bir marta bajarish kerak, masalan, ma'lumotlar bazasi bilan ma'lumotlarni yopish yoki boshqa kerak bo'lmagani uchun ma'lumotlarni o'chirish.
@oldin
public static void beforeMethod()
test sinfida terini tekshirish usulidan oldin chaqiriladigan usul; Bu erda siz kerakli ishga tushirishni viskona qilishingiz mumkin, masalan, parametrlarni o'rnatishingiz mumkin
@Keyin
public static void afterMethod()
test sinfidagi terini tekshirish usulidan keyin chaqiriladigan usul; Bu yerda siz kerakli deinitializatsiyani viskonatlashingiz mumkin, masalan, ma'lumotlarni olib tashlashingiz mumkin, chunki sizga ko'proq kerak emas

Tasdiqlash turlari ro'yxati

Ko'rib chiqish turiTavsif
muvaffaqiyatsiz()
muvaffaqiyatsiz (satrli xabar)
afv bilan perevannya test, tobto. sinov muvaffaqiyatsiz bo'ladi
assertTrue (mantiqiy shart)
assertTrue(java.lang.String xabari, mantiqiy shart)
onglarning tengligini qayta tekshirish shart qiymati rost
assertFalse (mantiqiy shart)
assertFalse(String xabar, mantiqiy shart)
muvofiqligini qayta tekshiring aql holati qiymati noto'g'ri
assertEquals(<тип>kutilgan,<тип>haqiqiy)
assertEquals(String xabari,<тип>kutilgan,<тип>haqiqiy)
muvofiqligini qayta tekshirish;<тип>- ce Ob'ekt, int, double í va boshqalar.
assertArrayEquals(bayt kutilgan, bayt haqiqiy)
assertArrayEquals(String xabari,<тип>kutilgan,<тип>haqiqiy)
massivlarni tenglik uchun qayta tekshirish; assertEquals ga o'xshash;<тип>- ce Ob'ekt, int, double í va boshqalar.
assertNotNull(ob'ekt ob'ekti)
assertNotNull(String xabari, Ob'ekt ob'ekti)
Ob'ekt null emasligini tekshiring
assertNull (ob'ekt ob'ekti)
assertNull(String xabari, Ob'ekt ob'ekti)
Ob'ekt null ekanligini tekshiring
assertSame(Ob'ekt kutilmoqda, ob'ekt haqiqiy)
assertSame(String xabari, kutilayotgan ob'ekt, ob'ekt haqiqiy)
kutilayotgan va aktual ikki obyektning tengligini qayta tekshirish, tobto. bitta va bir xil ob'ekt

JUnit dumba sinovi

JUnit ning asosiy imkoniyatlarini ko'rsatish uchun biz FuncMath ibtidoiy java sinfidan foydalanamiz, uning ikkita usuli mavjud - cheksiz sonning faktorial qiymati va ikkita son yig'indisi. Bundan tashqari, sinfning nusxasida vikliv usullarining nusxasi bo'ladi.

FuncMath umumiy klassi ( int qo‘ng‘iroqlar; public int getCalls() ( qo‘ng‘iroqlarni qaytarish; ) umumiy uzoq faktorial(int raqami) ( qo‘ng‘iroqlar++; agar (raqam)< 0) throw new IllegalArgumentException(); long result = 1; if (number >1) ( uchun (int i = 1; i< = number; i++) result = result * i; } return result; } public long plus(int num1, int num2) { calls++; return num1 + num2; } }

Teri testi stsenariysiga qo'shimcha ravishda, zarur kontekst, masalan, sinflar misollarini yaratish ortida kerak. Va shundan so'ng, zaxiralangan resurslarni tekshirish kerak. Menda @Before va @After uchun antotatsiya bor. @Before belgilangan usuldan keyin teri testi tushishi kuzatiladi va @After belgilangan usuldan keyin teri testi tushishi kuzatiladi. Ushbu darajadagi resurslarni ishga tushirish bilan bir qatorda, uni faqat bir marta ishlab chiqish kerak - faqat barcha testlardan so'ng - keyin bir nechta @BeforeClass va @AfterClass izohlarini yutib oling.

Kilcom stsenariylari bilan test klassi quyidagicha ko'rinadi:

Import org.junit.Test; import org.junit.After; import org.junit.Before; import org.junit.Assert; import org.junit.AfterClass; import org.junit.BeforeClass; umumiy sinf JUnit_funcMath kengaytiriladi Assert ( private FuncMath math; @Before public void init() ( math = new FuncMath(); ) @After public void tearDown() ( math = null; ) @Test public void calls() ( assertEquals(" math.getCalls() != 0", 0, dao.getConnection()); math.factorial(1); assertEquals(1, math.getCalls()); math.factorial(1); assertEquals(2, matematik. getCalls()); ) @Test umumiy bekor faktorial() ( assertTrue(math.factorial(0) == 1); assertTrue(math.factorial(1) == 1); assertTrue(math.factorial(5) == 120);) @Test(kutilayotgan = IllegalArgumentException.class) public void factorialNegative() ( math.factorial(-1); ) @Ignore @Test public void todo() ( assertTrue(math.plus(1, 1) == 3);

Qo'ng'iroqlar usuli qo'ng'iroqning to'g'riligini tekshiradi. Faktoriy usul muayyan standart qiymatlar uchun faktorial hisoblashning to'g'riligini tekshiradi. FaktorialNegative usuli faktorialning manfiy qiymatlari uchun IllegalArgumentExceptionni bekor qilishini bekor qiladi. Todo usuli e'tiborga olinmaydi.

Masalan, maqola JUnitning umumiy kontekstida taqdim etilganligini ko'rsating. Biroq, ilovalar bo'yicha ko'rsatmalardan ko'rinib turibdiki, g'alabalarda ramkadan foydalanish oson, qo'shimcha imkoniyatlar ko'p emas, lekin qoidalar va ishga tushirgichlardan tashqarida kengaytirish mumkin.

Bilaman, PZ ning rivojlanishi ko'proq, kamroq ishdir. Men har kuni yaxshiroq bo'lishga harakat qiladigan hunarmand bilan ishlayman. Har bir inson uchun eng oson yo'li spratni bilishdir yaxshi vositalar Keyingi ovqatlanish bo'yicha maslahat:

  • Men g'olib X vositasi aybdor bo'lsa?
  • Qanday qilib men g'alaba qozongan X vositasida aybdorman?

Avtomatlashtirilgan test dasturiy ta'minotni ishlab chiqishning muhim qismidir, ammo dasturchilarning bloglarida sinovdan o'tgan vositalar haqida uchta post mavjud. Nima uchun, men sizga "asboblar bilan ekran" ga qarashga ruxsat beraman. Men sizga 12 ta kutubxona va ramkalar haqida gapirib beraman, masalan, men birlik va integratsiya testlarini yozish uchun xakerman, shuningdek, sizga yon tomonlarda yordam beraman, shuning uchun ularni qanday buzishni tushunishingizga yordam berishim mumkin.

Keling, mening asboblar qutimni ko'rib chiqaylik

Undan oldin, asboblarga berilgan tavsifni o'zgartirishingiz mumkin bo'lsa, siz integratsiya va birlik sinovlarini avtomatik ravishda ishga tushirgandek, katlamani sozlash uchun javobgarsiz. Menda bu mavzu bo'yicha 2 ta eslatma bor:

  • Maven integratsiya testi turli kataloglarda integratsiya va birlik testlari bilan Maven katlamasini qanday sozlashimiz mumkinligini tasvirlaydi.
  • Gradle Start: TestSets plaginlari bilan integratsiya testi Gradle uchun ularni tavsiflaydi.

Endi siz mening asboblarimdan hayratlanishga tayyorsiz. Men ularni toifalarga ajratdim, shunda siz harakat qilishingiz osonroq bo'ladi.

Shuningdek, integratsiya va birlik sinovi bilan vicorous kabi 12 ta asbobning o'qi.

Ishlayotgan testlar

AssertJ domenga yo'naltirilgan filmlar uchun kerak bo'lganda yozilgan xususiyatlar bo'yicha testlarni qayta yozish imkonini beruvchi, afv etish to'g'risida qat'iy bayonot yozish uchun moslashuvchan API taqdim etadi, test kodining o'qilishini yaxshilaydi.

Dodatkovo:

  • Sinov maqsadlari uchun Hamcrest hack, testlarni yozish uchun Hamcrestni qanday buzish, shuningdek, qo'shimcha asosiy modullar bilan uning imkoniyatlarini qanday kengaytirish mumkin.
  • AssertJ da koristuvach taʼkidini yaratgandek, taʼkidni predmetga yoʻnaltirilgan rivojlanish tiliga aylantiramiz.
  • Biz toza yozamiz: qattiqlikni mavzuga yo'naltirilgan mina bilan almashtirish. Rozpovídaê nega biz g'olib virnu mavzuga yo'naltirilgan til kabi standart JUnit qattiqligini so'zlar bilan almashtirishda aybdormiz.

Ma'lumotlarga kirish kodini tekshirish

Ma'lumotlar bazasi kodi chakana sotuvchining mahalliy mashinasida ishlaydigan integratsiya testlarini yozish uchun mo'ljallangan.

JUnit uchun kengaytma, shuning uchun siz teri integratsiyasi testini o'tkazishdan va ma'lumotlar bazasini kerakli ma'lumotlar bilan to'ldirishdan oldin ma'muriyatda ma'lumotlar bazasini ishga tushirish uchun ariza berishingiz mumkin. DbUnit o'zining kamchiliklariga ega, ammo u test ma'lumotlari va test kodini almashish imkonini beruvchi asosiy vositadir.

Dodatkovo:

  • DbUnit ning asosiy komponentlarini, qo'shimcha DbUnit bilan kerakli yozish testlarini bilishni tavsiflaydi.
  • Nada 5 yozish qoidalari eng yaxshi testlar ma'lumotlarga kirish kodi.

Java - 1991 yilda Sun Microsystems tomonidan tarqatilgan ob'ektga yo'naltirilgan, kuchli terilgan til dasturlash. Bu til dastlab Oak deb atalgan va yo‘l-yo‘lakay elektronikani dasturlash uchun ishlatilgan, ammo keyinchalik u Java deb o‘zgartirilgan. 1995 yilda Java-ning rasmiy nashri yanada muvaffaqiyatli bo'ldi va yangi til paydo bo'lganidan ko'p o'tmay, Java server qo'shimchalarini ishlab chiqish vositasi sifatida kuchli pozitsiyani egalladi.

Bizning zamonda Java dasturiy ta'minotni ishlab chiqishning barcha sohalarida - server dasturlari, ish stoli dasturlari, asboblar, veb-qo'shimchalar - hamma narsa Java va bahsli texnologiyalar yordamida ishlab chiqilmoqda.

Java testi uchun maqsadli auditoriya

Java dasturlash bo'yicha minimal ma'lumotga ega bo'lgan ko'proq sotuvchilarni bilishingizni isbotlash uchun Java-ni sinab ko'ring. Java bilan juda ko'p ishlashni o'ylamaydigan va bu haqda minimal ogohlantirish olishni xohlaydigan odamlar uchun test yanada boy bo'ladi. asosiy tushunchalar tsíêí mashhur kino dasturlash. Shuningdek, ushbu test talabalarga Java tilini o'rganish, bilimlarni mustahkamlash, VNZ dan uzoqlashtirish yoki mustaqil ish natijasida tanish bo'lishi mumkin.

Java testiga yo'naltirish

Java tili asoslaridan testdan o'tishdan oldin siz "o'zgartirish", "loop", "usul" kabi asosiy tushunchalarni bilasiz va asosiy zamonaviy konstruktsiyalarning sintaksisini bilasiz. Agar yo'q bo'lsa, kirish kursini o'qib, Java asoslarini o'rganishingizni tavsiya qilamiz.

Java test tuzilmasi

“Java - Fundamentals” testi quyidagi mavzularni qamrab oladi:

Oziq-ovqat sinovlari mavzulari bo'yicha hisobotni quyida o'qishingiz mumkin:

  • Bu sinfning ob'ektlari: mavzuning oziq-ovqatlari sinf, sinf (ob'ekt) misoli, konstruktor, usul va sinfning maydoni sifatida tushuniladigan tarzda yoritilgan.
  • Sintaksis: bu bo'linmaning kuchi harakat kalit so'zlari, operatorlar, asosiy turlar (ibtidoiylar, String), boshqarish uchun konstruktsiyalar (if-else, while, for) haqidagi bilimlarni ko'rib chiqish, shuningdek, qayta ishlashni tushunishdir. aybdor vaziyatlar (istisno).
  • Bundan tashqari: tsey razdyl qasos schodo tushunish asoslari, atamalar va qisqartmalar, sinflar nomlash konventsiyalari, o'sha usullarini o'zgartirish. Bundan tashqari, har bir tarqatish uchun turli xil fayllar (.java, .class, .jar) va paketlar manbalari, ob'ektlarning hayot aylanishi, saqlash to'plami (axlat yig'ish) mavjud.

Onlayn Java testini topshirish Java asoslari haqidagi bilimlaringizni qayta ko'rib chiqish va mustahkamlashga yordam beradi, shuningdek, Java test tarqatilishidan yanada ilg'or testlardan o'tishga olib keladi.

Umid qilaylik Daniya testi so‘kinib yig‘laysan.

Java testini yanada rivojlantirish

Java testi doimiy ravishda yangi ovqatlar bilan yangilanadi.

Quizful jamoasining eng yaqin rejalari Java-da ekspert darajasidagi testlarni yaratishdir. Ehtimol, Java Puzzlers testi yaratilishi mumkin, ammo afsuski, u ko'proq mos ravishda ovqatni eslatadi.

Xamirning oziqlanishiga hurmatingiz bo'lsa, umuman bizga yozing. Salom baxtli bo'ling.

Java dasturchilari uchun test topshiriqlarini qidirib, men ularni cicavia saytiga yubordim ( Koristuwacham Avast bormang, bu skript troyan, aks holda mumkin) - http://www.betterprogrammer.com. Java dasturchilarining malakasini eng oddiy usulda yutib oling avtomatik ravishda: zudlik bilan harakatlanadigan katlamaning ba'zi funktsiyalarini (usullarini) yozing va kodni TextArea-ga nusxalang. Dvigatelni saytga vazifalar bilan ishlash uchun berdik (boshqa tarzda birlik testi kabi emas), birinchi malaka indeksini "shirinlik-sifat" mezonlariga muvofiq hisoblang va quyidagicha ko'ring:

Dali pochinayutsya ovqat. Men o'zim hayotimda to'satdan Java-da dasturlashdim (va men shunchaki vazifani o'tkazib yubordim), shuning uchun testning 82% teng deb hisoblanadi. java bo'lmagan dasturchi. Java Junior, Java Programmer va ayniqsa Java Senior yozish uchun qancha kredit kerak?! Qaysi natija qayd etilgan to'g'ri Java dasturchisi - 90, 95, 99? Hozir esa buti kabi, “dasturchi” kabi 82 dan kam yozyapti, lekin u o'zini robotdan kamroq qilib ko'rsatmayaptimi?!

Mobil qo'shimchalar