JUnit тусламжийн Java кодыг турших - Заавар. Java ур чадварын шалгалт - Үндсэн ойлголтууд Онлайн java rhubarb тест

Testuvannya бид хөгжилтэй, tsіkavim байна zavzhd buvaє хол байна. Tsey үйл явц zvchichay dosit trivaly болон нэг хэвийн ажлын давталт цаг. За, саяхан програмистууд java классыг шалгахдаа стандарт висновка эсвэл дибаггер ашиглаж байсан бололтой.

Энэ нийтлэлд би JUnit 4 номын санг тайлбарлах болно, ингэснээр тест бичих процессыг автоматжуулахад тусална.

JUnit Framework-ийн үндсэн боломжуудыг харуулахын тулд анхдагч Java анги бичиж, энэ талаар мэдэцгээе. Матимагийн энэ ангилалд төгсгөлгүй тооны факториалын ач холбогдол ба хоёр тооны нийлбэр гэсэн хоёр арга байдаг. Нэмж дурдахад, ангийн хуулбар дээр викликив аргуудын хуулбар байх болно.

Нийтийн анги MathFunc ( int дуудлага; public int getCalls() ( буцах дуудлага; ) нийтийн урт факториал(int тоо) ( дуудлага++; if (тоо 1) (for (int i = 1; i))

Одоо Нэгжийн тестийг бичье. Хэнд зориулж бид олон тооны туршилтын аргуудаас анги үүсгэдэг. Мэдээжийн хэрэг, анги нь өшөө авалт, стандарт нэмэлт аргууд байж болно. Тиймээс гүйгч тестүүд нь хэн, хэн, шалгах аргуудыг шууд тодорхойлох боломжтой бөгөөд @Test-ийн тэмдэглэгээг тэмдэглэх шаардлагатай.

Тэмдэглэлд дараах параметрүүдийг өгч болно.

  • хүлээгдэж буй - аргын дагуу ямар төрлийн нүд ирмэхийг зааж өгөх (доорх div. өгзөг);
  • завсарлага - милисекундэд тодорхой цагийн дараа тестийг туршилтанд хавчуулж, амжилтгүй болсон мэт zarahuvat хийнэ үү.

Хэрэв та эхний тестийг алгасах ёстой гэж хэлэхийг хүсвэл @Ignore annotation гэж тэмдэглэнэ үү. Хэрэв та хүсвэл @Test зааврыг устгаж болно.

Жишээ нь, танд арьсны сорилтын хувилбарт дууны контекст хэрэгтэй, жишээлбэл, ангийн жишээ үүсгэх хоцрогдол. Үүний дараа нөөцийн нөөцийг шалгах шаардлагатай. Танд @ Өмнө ба @ Дараа гэсэн тайлбар юу хэрэгтэй гэж бодож байна. @Before тэмдэглэгдсэн аргын дараа арьсны сорил уналт, @After тэмдэглэгдсэн аргын дараа арьсны сорил уналт хийгдэнэ.

Хэрэв тухайн нөөцийн түвшний эхлэлийг зөвхөн нэг удаа хийх шаардлагатай бол - зөвхөн бүх туршилтын дараа - @BeforeClass болон @AfterClass гэсэн хэд хэдэн тайлбарыг оноо.

Би тэнхлэг нь өөрөө туршилтын хувилбартай dekіlkom-ийн туршилтын анги юм.

Нийтийн анги MathFuncTest ( private 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(хүлээгдэж буй = IllegalArgumentException.class) олон нийтийн хүчингүй хүчингүй факториалСөрөг() ( math.factorial(-1); ) @Test @Ignore public void todo() ( assertTrue(math.plus(1, 1) == 3); ) )

Дуудлага хийх арга нь хонхны дууны зөв эсэхийг шалгадаг. Факториаль арга нь тодорхой стандарт утгуудын хүчин зүйлийн тооцооллын зөв эсэхийг шалгадаг. ФакториалСөрөг арга нь хүчин зүйлийн сөрөг утгуудын хувьд энэ нь IllegalArgumentException-г шидэх болно гэдгийг хүчингүй болгодог. Todo аргыг үл тоомсорлох болно. Хэрэв та кодыг туршиж байгаа бол @Ignore тэмдэглэгээг цэвэрлэж үзээрэй.

assertTrue арга нь үр дүнг баталгаажуулсан эсэхийг шалгадаг. Deyakі іnshі аргууд, yakі нь эерэг болж чадна:

  • assertEquals - үр дүнг баталгаажуулж, үр дүнг хасах нь үүсдэг;
  • assertNull - вирусын үр дүн null;
  • assertNotNull - virazu vіdminny vіd null-ийн үр дүн;
  • AssertSame - нэг объектоор объектыг баталгаажуулах, татгалзах.
  • fail - бурууг үүсгэх арга AssertionError - dodaemo бол програмын гарчгийн алдаа биш юм.

Д манай одоогийн ертөнц рүү IDE нь төсөлд тестийг хэрхэн яаж хийхийг мэддэг. Харамсалтай нь, хэрэв та програмын кодыг ашиглахын тулд тэдгээрийг гараар ажиллуулахыг хүсвэл. Та хэнд зориулж Runner "om. Текстийг ашиглана уу - junit.textui.TestRunner, график хувилбарууд - junit.swingui.TestRunner, junit.awtui.TestRunner.

Гэхдээ илүү орчин үеийн арга нь JUnitCore ангитай адил юм. MathFuncTest ангид дараагийн үндсэн аргыг нэмнэ үү:

Public static void main(String args) throws Exception ( JUnitCore runner = new JUnitCore(); Үр дүн = runner.run(MathFuncTest.class); System.out.println("туршилтуудыг ажиллуулах: " + result.getRunCount()); System.out.println("амжилтгүй болсон тестүүд: " + result.getFailureCount()); System.out.println("үл тоосон тестүүд: " + result.getIgnoreCount()); System.out.println("амжилт: " + үр дүн .wasSuccessful()); )

Виконаннигийн I үр дүн:

Туршилтуудыг ажиллуулах: 3 амжилтгүй тест: 0 үл тоомсорлосон тест: 1 амжилттай: үнэн

Илүү эрт хувилбарууд JUnit тестийн анги бичихийн тулд та junit.framework.TestCase-ийг задлах хэрэгтэй. Дараа нь String параметр болгон хүлээн авдаг байгуулагчийг зааж өгөх шаардлагатай - би аргыг нэрлэх болно - түүнийг аавын ангид дамжуулна. Туршилтын аргын арьс нь туршилтын угтвараас эхлээд гэм буруутай. Нөөцийг эхлүүлэх, масштаблахын тулд setUp болон tearDown аргыг ашигласан. Товчхондоо хөөе. За, одоо бүх зүйл энгийн, тийм ээ.

Бүх жилийн турш тэнхлэг i. Crap, JUnit Framework нь танд туслах зүйлээр баялаг юм. Сэтгэгдэл, хоол тэжээл нь статистикийн тухай юм.

JUnit- Java программыг шалгах нэгжийн номын сан. Кент Бек, Эрик Гамма нарын бүтээсэн JUnit нь Кент Бэкийн Smalltalk-ийн SUnit-ээс үндэслэсэн янз бүрийн програмчлалын хэлнүүдийн ижил xUnit хүрээн дээр суурилдаг. JUnit нь JMock, EasyMock, DbUnit, HttpUnit гэх мэт өргөтгөлүүдийн экосистемийг төрүүлдэг.

номын сан JUnit PHP (PHPUnit), C# (NUnit), Python (PyUnit), Fortran (fUnit), Delphi (DUnit), Чөлөөт Паскаль (FPCUnit), Perl (Test::Unit), C++ (CPPUnit) зэрэг бусад movs-ээр хөрвүүлсэн. , Flex (FlexUnit), JavaScript (JSUnit).

JUnit- Энэ бол тест хийх, өөрөөр хэлбэл арга, анги гэх мэт олон кодыг туршиж үзэх Java хүрээ юм. Досвид, JUnit-ээс ажлын цагийг хасч, туршилтын үзэл баримтлалыг боловсруулахад чухал ач холбогдолтой програм хангамж.

өгзөгний тест JUnit

org.junit.Test импортлох; import junit.framework.Assert; нийтийн анги 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 вики хэрэгтэй байна

JUnit нь кодыг хүссэн үедээ өөрчлөх боломжийг олгодог. Хэрэв хөтөлбөр нь илүү энгийн байхаа больж, хувийн бус анги, аргуудыг багтаасан бол засварлахад нэлээд цаг хугацаа шаардагдана. Мэдээжийн хэрэг, бүх үйл явцыг илүү хурдан автоматжуулах боломжтой. Використання JUnitчухал зусилгүйгээр програмын кодыг дахин бичих боломжийг олгодог бөгөөд маш их цаг хугацаа шаарддаггүй.

нэгжийн туршилтанги, чиг үүрэг, тэдгээрийн баримт бичгийг хянан үзэх үр дүнд хүлээн зөвшөөрөхөөс өмнө. Зөвхөн баримт бичиг биш, харин баримтжуулалт нь кодыг танилцуулсан функцуудтай нийцэж байгаа эсэхийг автоматаар шалгах боломжтой болно. Tse zruchno болон ихэвчлэн цаг хугацаа гэж rozroblyyat тест, тийм болохоор і анги хэрэгжүүлэх өмнө. Туршилтаар дамжуулан хөгжүүлэлт нь програм хангамжийн ноцтой аюулгүй байдлыг бий болгох маш түгээмэл технологи юм.

Ангилагчийн JUnit тестийг тухайн газар дээрх тестийг харна уу

Програм хангамжийн туршилтыг хоёр төрөлд хувааж болно.

  • туршилтын хар дэлгэц;
  • цагаан дэлгэцийг турших.

Хөтөлбөрийг хар дэлгэц шиг туршиж үзэх цаг дор програмын дотоод бүтцийг хүндэтгэх хүртэл хүлээн зөвшөөрдөггүй. Програм шиг утга учиртай, ажиллагаатай байж болох бүх зүйл аюулгүй байж чадна. Хайрцаг шиг програмуудыг туршихдаа дотоод бүтцийг хүндэтгэдэг, өөрөөр хэлбэл. аргуудын ангилал. Krym tsgogo, testuvannya нь chotiri тэнцүү хуваагдаж болно:

  • туршилтын нэгж - okremih тооны кодын туршилт;
  • интеграцийн туршилт - харилцан горим ба хамтарсан роботын бүрэлдэхүүн хэсгүүдийн туршилт;
  • системийн туршилт - системийг бүхэлд нь турших;
  • анхан шатны туршилт - вимогамуудын гүйцэтгэлийн бэлэн системийн дэд багийн туршилт.

Цагаан дэлгэцийг томилох, турших туршилтын нэгж.

JUnit 3 ба JUnit 4 гэсэн хоёр хувилбарыг туршиж үзэх боломжтой. Хуучин төслүүд нь Java 1.4-ийг дэмждэг 3-р хувилбартай тул бид зөрчилтэй хувилбаруудыг харж болно.

Junit 3

Тест үүсгэхийн тулд TestCase тестийн ангиллыг бууруулж, шаардлагатай бол setUp болон tearDown аргуудыг дахин тодорхойлж, хамгийн чухал нь "тест" гэсэн товчлолоор нэрлэж болох тестийн аргуудыг өргөжүүлнэ. Тестийг эхлүүлэх үед тестийн ангийн жишээ шууд үүсгэгдэнэ (анги доторх арьсны тестийн хувьд ангийн жишээ нь), дараа нь setUp аргыг цохиж, тестийг өөрөө ажиллуулж, дараа нь tearDown аргыг дуусгах хүртэл зоддог. Ямар нэгэн буруутгах арга байсан юм шиг шалгалт нь бүтэлгүйтсэн гэж үздэг.

Тайлбар: Туршилтын аргууд нь олон нийтэд хүчингүй байх ёстой бөгөөд статик байж болно.

Туршилтууд нь vikonnannya дуулах код, дахин баталгаажуулалтаас бүрддэг. Perevіrki ихэвчлэн тусламж анги vykonuyutsya батлах assert түлхүүр үгийг өөрчлөхийг хүсч байна.

Жишээлбэл, бид хоосон мөрийг дахин шалгах, 16 эгнээнд байтуудын дарааллыг өгөх аргуудыг багтаасан мөр бүхий роботуудад зориулсан хэрэгслийг харж болно.

Нийтийн анги JUnit3StringUtilsTest нь TestCase-г өргөтгөдөг (хувийн эцсийн Map toHexStringData = Шинэ HashMap(); хамгаалагдсан void setUp() Exception шиднэ (toHexStringData. put("", Шинэ байт); 13, 17, 45, 127)); тодорхой (); ) public void testToHexString() ( for (Iterator iterator = toHexStringData.keySet().iterator(); iterator.hasNext();) ( эцсийн мөр хүлээгдэж буй = (String)iterator.next(); эцсийн байт testData = (байт) toHexStringData.get(хүлээгдэж буй); эцсийн мөр бодит = StringUtils.toHexString(testData); assertEquals(хүлээгдэж буй, бодит); ) ) //... )

Нэмэлт боломжууд, TestSuite

5-р сарын 3 нэмэлт боломжууд. Жишээлбэл, та viprobuvannya-г бүлэглэж болно. Ангид түрүүлэх нь хэнд хэрэгтэй вэ TestSuite:

Нийтийн анги JUnit3StringUtilsTestSuite нь TestSuite-г өргөтгөдөг ( нийтийн JUnit3StringUtilsTestSuite() ( addTestSuite(StringUtilsJUnit3Test.class); addTestSuite(OtherTest1.class); addTestSuite(OtherTest2.class); )

Та туршилтыг хэд хэдэн удаа давтаж болно. RepeatedTest-д хэн ялах вэ:

Нийтийн анги JUnit3StringUtilsRepeatedTest нь RepeatedTest ( нийтийн JUnit3StringUtilsRepeatedTest() ( супер(шинэ JUnit3StringUtilsTest(), 100); ) ) өргөтгөдөг.

ExceptionTestCase гэх мэт тестийн ангиллыг өвлөн авснаар та wikidexclusion дээрх кодыг дахин засварлаж болно:

Нийтийн анги JUnit3StringUtilsExceptionTest нь ExceptionTestCase ( нийтийн JUnit3StringUtilsExceptionTest(эцсийн мөрийн нэр) ( super(нэр, NullPointerException.class); ) public void testToHexString() ( StringUtils.toHexString(null)) өргөтгөдөг;

Програмуудаас харахад бүх зүйл хийхэд хялбар бөгөөд бичих зүйл байхгүй - ядаж JUnit тестийн код.

JUnit 4

JUnit 4 нь Java 5.0-д зориулсан шинэ боломжуудыг нэмсэн; Шалгагчид нэмэлт тэмдэглэгээнд нээлттэй байж болно. Ямар ч үед өмнөх хувилбарын хүрээний төөрөгдөл ихтэй байдаг. Энэ хооронд судалж үзсэн бүх зүйл шинэ хувилбарт шинээр гарсан JUnit 4 Crime RepeatedTest-д дадлагажих болно.

JUnit 4-д ямар өөрчлөлт гарсан бэ? Хамгийн өгзөгийг нь харцгаая, дараа нь дахин шинэ боломжуудтай:

Олон нийтийн анги JUnit4StringUtilsTest нь Assert (хувийн эцсийн Map toHexStringData = шинэ HashMap (); @Олон нийтийн статик хүчингүй болохоос өмнө setUpToHexStringData() ( toHexStringData.put(", шинэ байт); toHexStringData.put("01020d112d7f", шинэ байт(1,2,13,17,45,127)); toHexStringData0.put,(" byte(0,-1,-14,17,-128)); //... ) @Олон нийтийн статик хүчингүй болсны дараа DownToHexStringData() ( toHexStringData.clear(); ) @Тест нийтийн хүчингүй болгох testToHexString() ( (Газрын зурагт) .Нэвтрэх оруулга: toHexStringData.entrySet()) ( эцсийн байт testData = entry.getValue(); хүлээгдэж буй эцсийн мөр = entry.getKey(); эцсийн мөр бодит = StringUtils.toHexString(testData); assertEquals(хүлээгдэж буй, бодит); ) ) )

JUnit 4-д юу өөрчлөгдсөн бэ?

  • Өршөөл үзүүлэхийн тулд хичээлийн ажлыг багасгаж болно батлахүүнийг neobov'yazkovo хүсч байна.
  • Хийсвэр @Өмнө ньТуршилтын ялагчаас өмнө дуудагдах аргуудыг хэлнэ. Арга нь бути хийдэг нийтийн хүчингүй. Энд та туршилтын урьдчилсан тохиргоог сонсох бөгөөд нэгэн зэрэг туршилтын өгөгдлийг үүсгэх (арга setUpToHexStringData).
  • Та зааврыг ялах боломжтой @ForeClassтестийн ангийн хуулбарыг үүсгэхээс өмнө аргуудыг хэрхэн тодорхойлох, тэдгээрийг хэрхэн дуудах вэ; гэм буруугийн аргууд нийтийн статик хоосон. Өгөгдсөн заавар (арга) maє sens vikoristovuvaty үед туршилтын анги турших боломжтой бол, өөр өөр presets vikoristovuyut, эсвэл туршилтын vicarious тест дангаар хийж байгаа бол, дараа нь арьсны сорил нь цаг тутамд арчиж.
  • Хийсвэр @Дараа ньаргуудыг томилох, vikonannya testіv дараа viklikanі. Арга нь бути хийдэг нийтийн хүчингүй. Энд туршилтын дараа нөөцийг ажиллуулахыг зөвшөөрдөг; манай vipad-ийн хувьд - туршилтын өгөгдлийг цэвэрлэх (арга tearDownToHexStringData).
  • Хийсвэр @Хичээлийн дараа zmіstom z-д зориулсан pov'azana @ForeClassангид туршилт хийсний дараа ale vikonuє аргууд. Як и у випадку з @ForeClass, гэм буруугийн аргууд нийтийн статик хоосон.
  • Хийсвэр @Туршилттуршилтын аргуудыг тодорхойлох. Өмнөх шигээ бути угаах аргыг хэрэглэдэг нийтийн хүчингүй. Энд засварууд өөрсдөө тархсан байна. Нэмж дурдахад, энэ зааварт та хүлээгдэж буй хоёр параметрийг ялах боломжтой - вин болон завсарлагааны тоог тохируулах - туршилт амжилтгүй болсон гэж үзэх цагийг тохируулна уу.

Параметр бүхий захиалгат тэмдэглэгээг ашиглах, JUnit Test:

@Test(хүлээгдэж буй = NullPointerException.class) нийтийн хүчингүй болгох testToHexStringWrong() ( StringUtils.toHexString(null); ) @Test(timeout = 1000) нийтийн хүчингүй болгох хязгааргүй() ( while (үнэн); )

JUnit үл тоомсорлох

Туршилтын нэг болохын хувьд ямар нэг ноцтой шалтгааны улмаас үүнийг асаах шаардлагатай байдаг, жишээлбэл, туршилтыг өршөөлөөр аажмаар дуусгадаг. Туршилтын залруулга нь ирээдүйд хөнгөн тайлбар хийх боломжтой @ үл тоомсорлох. Хэрэв та энэ зааврыг ангид байрлуулбал тухайн ангийн бүх тестүүд багтах болно.

@Ignore @Test(цаг хугацаа = 1000) public void infinity() ( while (үнэн); )

Шивээсний дүрэм, JUnit Rule

JUnitЭнэ нь дараагийн удаа шалгалтыг дуусгах хүртэл дүрмийн жагсаалттай дуунуудыг ялах боломжийг олгодог бөгөөд энэ нь функцийг өргөжүүлдэг. Жишээлбэл, туршилтын хугацаа дуусах (Timeout), буруутгах цэгийг тохируулах (ExpectedException), цагийн файлуудтай ажиллах (TemporaryFolder) болон int зэрэг дүрмүүд байдаг.

Дүрэм журмыг дүлий болгохын тулд үүнийг бий болгох шаардлагатай олон нийтийнүгүй статикталбарыг ижил төрлийн MethodRule төрөл болон тусламжийн түлхүүр үгийн yogo тэмдэглэгээг оруулна дүрэм.

Нийтийн анги JUnitOtherTest ( @Rule public final TemporaryFolder хавтас = 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-г шиддэг ( эцсийн Файлын бүртгэл = folder.newFile("debug.log"); эцсийн FileWriter logWriter = шинэ FileWriter(лог); logWriter.append("Сайн уу, "); logWriter. append("World!!!"); logWriter.flush(); logWriter.close(); ) @Test public void testExpectedException() нь IOException ( thrown.expect(NullPointerException.class); StringUtils.toHexString (null); ) шиддэг. )

Туршилтын багц, JUnit Suite, SuiteClasses

Тестийг ажиллуулж байгаа нь нэмэлт тэмдэглэгээг сайжруулах боломжтой @RunWith. Өөрийн тестийн аргаар ашиглаж болох тестийн ангиудыг тестийн багцаас (Suite) авч болно. Жишээлбэл, туршилтын объектуудын хоёр ангиллыг бий болгосон: TestFilter, TestConnect. Эдгээр хоёр тестийн ангиллыг TestWidgets.java нэг тестийн ангид нэгтгэж болно:

com.objects багц; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses (( TestFilter.class, TestConnect.class )) нийтийн анги TestWidgets ()

Туршилтын оноог сайжруулахын тулд @SuiteClasses гэсэн тайлбарыг оруулсан, тестийг ангид оруулсан болно.

Хийсвэр ангилал

Хийсвэр Ангилалангилал (бүлэг) дэх тестүүдийг нэгтгэх боломжийг танд олгоно. Хэнд зориулсан шалгалт нь ангилалтай байдаг @Ангилал, үүний дараа Suite-д эхлүүлсэн тестийн ангиллыг тохируулна. Та дараах байдлаар харагдаж болно.

Нийтийн анги JUnitStringUtilsCategoriesTest өргөтгөл Assert ( //... @Category (Unit.class) @Test public void testIsEmpty() ( //... ) //... ) @RunWith(Categories.class) @Categories.IncludeCategory ( Unit.class) @Suite.SuiteClasses (( JUnitOtherTest.class, JUnitStringUtilsCategoriesTest.class )) нийтийн анги JUnitTestSuite()

Хураангуй, JUnit параметржүүлсэн

Хийсвэр Параметржүүлсэнпараметржүүлсэн тестүүдийг шалгах боломжийг олгодог. Туршилтын ангид өгөгдлийн жагсаалтыг эргүүлэх статик арга байдаг бөгөөд үүнийг анги үүсгэгчийн аргумент болгон ашиглах болно.

@RunWith(Parameterized.class) нийтийн анги JUnitStringUtilsParameterizedTest сунгаж Баталгаажуулах (хувийн эцсийн CharSequence testData; хувийн эцсийн логикийн хүлээгдэж буй; нийтийн JUnitStringUtilsParameterizedTest(эцсийн CharSequence testData, эцсийн логикийн хүлээгдэж буй) ( this.testData = public testoid (нийтийн тест) StringUtils.isEmpty(testData); assertEquals(хүлээгдэж буй, бодит); ) @Parameterized.Parameters нийтийн статик жагсаалт isEmptyData() ( Arrays.asList буцаана(шинэ Объект ( ( null, үнэн ), ( "", үнэн ), ( " ", худал ), ( "зарим мөр", худал ), )) ) )

Аргын параметржуулалт: Theories.class, DataPoints, DataPoint, Theory

Хийсвэр онолууднь бүтээгчийг бус туршилтын аргыг параметрчилдөг. Дани туслахаар томилогдсон @DataPointsі @DataPoint, туршилтын арга - тусламж @онол. Нэг төрлийн функц болох тест нь иймэрхүү харагдах болно:

@RunWith(Theories.class) нийтийн анги JUnitStringUtilsTheoryTest нь Assert ( @DataPoints public static Object isEmptyData = new Object ( ( "", true ), ( " ", false ), ( "some string", false ), ); @DataPoint-ийг өргөтгөдөг. public static Object nullData = new Object ( null, true ); @Theory public void testEmpty(эцсийн объект... testData)

Туршилтын дараалал

Хэрэв тестийг эхлээд эрэмбэлэх шаардлагатай бол JUnit 4.11-ээс нэвтрүүлсэн @FixMethodOrder(MethodSorters.NAME_ASCENDING) тэмдэглэгээг ашиглан үүнийг хурдасгаж болно. Жишээлбэл:

@FixMethodOrder(MethodSorters.NAME_ASCENDING) нийтийн анги MyTest ( @Test public void test01()(...) @Test public void test02()(...) ... @Test public void test09()(...) )

Өөр нэг ээлжинд та дараагийн 2 алхамыг давж чадна.

Хүчингүй тест01(); хүчингүй тест02(); ... хүчингүй болсон тест09(); @Test public void testOrder1() ( test1(); test3(); ) @Test(expected = Exception.class) public void testOrder2() ( test2(); test3(); test1(); ) @Test(expected = NullPointerException.class) public void testOrder3() ( test3(); test1(); test2(); )

@ Public void testAllOrders() ( for (Object sample: permute(1, 2, 3)) for (Object index: sample) ( switch ((((Бүхэл) индекс).intValue()) ( case 1: test1( ); завсарлага; тохиолдол 2: test2(); завсарлага; тохиолдол 3: тест3(); завсарлага; ) ) ) )

Үндсэн тэмдэглэгээний жагсаалт

ХийсвэрТодорхойлолт
@Туршилт
public void testMethod()
аргыг турших боломжтой
@Тест(цаг хугацаа=100)
public void testMethod()
хэрэв хугацаа дууссан бол хугацаа дууссан параметрийг хүчингүй болгож, туршилт удахгүй дуусахгүй
@Тест(хүлээгдэж буй = MyException.class)
public void testMethod()
арга нь викинг гэм буруутай бөгөөд MyException ангиудыг буруутгадаг, эс тэгвээс тест холгүй дуусна.
@ үл тоомсорлох
public void testMethod()
туршилтын аргыг үл тоомсорлодог
@ForeClass
тестийн аргуудыг дуудахаас өмнө ангид нэг удаа дуудагддаг арга; Энд эхлэлийг тавих боломжтой бөгөөд ингэснээр зөвхөн нэг удаа хожих шаардлагатай, жишээлбэл, өгөгдлийг уншихад тэд туршилтын аргаар ялах эсвэл өгөгдлийн сантай мэдээллийн сан үүсгэх болно.
@Хичээлийн дараа
public static void testMethod()
тестийн аргуудыг дуудсаны дараа ангид нэг удаа дуудагдах арга; Эндээс та анхны тохиргоог тайлах асуудлыг цэгцлэх боломжтой бөгөөд ингэснээр та зөвхөн нэг удаа шифрийг тайлах хэрэгтэй, жишээлбэл, өгөгдлийн сантай дансаа хаах эсвэл дахиж шаардлагагүй тул өгөгдлийг харах боломжтой.
@Өмнө нь
public static void beforeMethod()
туршилтын ангид арьсны сорилтын аргын өмнө дуудагддаг арга; Энд та шаардлагатай эхлүүлэх тохиргоог хийж болно, жишээлбэл, параметрүүдийг тохируулна уу
@Дараа нь
public static void afterMethod()
туршилтын ангид арьсны сорилтын аргын нэрээр нэрлэгддэг арга; Энд та шаардлагатай идэвхгүйжүүлэх тохиргоог хийж болно, жишээлбэл, нэмэлт шаардлагагүй тул өгөгдлийг устгах боломжтой

Баталгаажуулалтын төрлүүдийн жагсаалт

Шүүмжийн төрөлТодорхойлолт
бүтэлгүйтсэн()
амжилтгүй (мөр зурвас)
өршөөлөөр perevannya тест, tobto. шалгалт амжилтгүй болно
assertTrue(логийн нөхцөл)
assertTrue(java.lang.String мессеж, логик нөхцөл)
оюун санааны тэнцвэрт байдлын нөхцөл байдлын үнэ цэнийг дахин шалгах
assertFalse(логийн нөхцөл)
assertFalse(Мөр зурвас, логик нөхцөл)
тохирох эсэхийг дахин шалгаарай оюун санааны нөхцөл үнэ цэнэ худал
assertequals(<тип>хүлээгдэж буй,<тип>бодит)
assertEquals(Мөр зурвас,<тип>хүлээгдэж буй,<тип>бодит)
шаардлага хангасан эсэхийг дахин шалгах;<тип>- ce Object, int, double і гэх мэт.
assertArrayEquals(байтын хүлээлт, байт бодит)
assertArrayEquals(Мөр зурвас,<тип>хүлээлт,<тип>бодит байдал)
тэгш байдлын массивуудыг дахин шалгах; assertEquals-тай төстэй;<тип>- ce Object, int, double і гэх мэт.
assertNotNull(Объект объект)
assertNotNull(Мөр зурвас, Объект объект)
Объект хоосон биш эсэхийг шалгана уу
assertNull(Объект объект)
assertNull(Мөр зурвас, Объект объект)
Объект хоосон байгаа эсэхийг шалгана уу
assertSame(Хүлээгдэж буй объект, бодит объект)
assertSame(Мөр зурвас, Хүлээгдэж буй объект, Объект бодит)
хүлээгдэж буй болон бодит хоёр объектын тэгш байдлыг дахин шалгах, tobto. нэг бөгөөд ижил объект

JUnit өгзөгний сорил

JUnit-ийн үндсэн боломжуудыг харуулахын тулд бид хязгааргүй тооны факториалын утга ба хоёр тооны нийлбэр гэсэн хоёр аргатай FuncMath командын java классыг ашигладаг. Нэмж дурдахад, ангийн хуулбар дээр викликив аргуудын хуулбар байх болно.

Нийтийн анги FuncMath ( int дуудлага; public int getCalls() ( буцах дуудлага; ) нийтийн урт хүчин зүйл (int тоо) ( дуудлага++; хэрэв (тоо)< 0) throw new IllegalArgumentException(); long result = 1; if (number >1) ( for (int i = 1; i< = number; i++) result = result * i; } return result; } public long plus(int num1, int num2) { calls++; return num1 + num2; } }

Арьсны тестийн хувилбараас гадна шаардлагатай нөхцөл байдал, жишээлбэл, ангиудын тохиолдлуудыг бий болгоход шаардлагатай байдаг. Үүний дараа нөөцийн нөөцийг шалгах шаардлагатай. Надад @Before болон @After гэсэн антотаци бий. @Before тэмдэглэгдсэн аргын дараа арьсны сорил уналт, @After тэмдэглэгдсэн аргын дараа арьсны сорил уналт хийгдэнэ. Энэ түвшний нөөцийг эхлүүлэхийн зэрэгцээ үүнийг бүгдийг нь нэг удаа боловсруулах шаардлагатай - зөвхөн бүх туршилтын дараа - дараа нь @BeforeClass болон @AfterClass гэсэн хэд хэдэн тайлбарыг ялах хэрэгтэй.

Kilcom хувилбар бүхий тестийн анги дараах байдалтай байна.

Import org.junit.Test; import org.junit.After; import org.junit.Before; import org.junit.Assert; import org.junit.AfterClass; import org.junit.BeforeClass; нийтийн анги JUnit_funcMath өргөтгөл 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, математик. getCalls()); ) @Тест нийтийн хүчингүй хүчин зүйл() ( assertTrue(math.factorial(0) == 1); assertTrue(math.factorial(1) == 1); assertTrue(math.factorial(5) == 120);) @Test(expected = IllegalArgumentException.class) public void factorialNegative() ( math.factorial(-1); ) @Ignore @Test public void todo() ( assertTrue(math.plus(1, 1) == 3);

Дуудлага хийх арга нь хонхны дууны зөв эсэхийг шалгадаг. Факториаль арга нь тодорхой стандарт утгуудын хүчин зүйлийн тооцооллын зөв эсэхийг шалгадаг. ФакториалСөрөг арга нь хүчин зүйлийн сөрөг утгуудын хувьд энэ нь IllegalArgumentException шидэхийг хүчингүй болгодог. Todo аргыг үл тоомсорлох болно.

Жишээлбэл, нийтлэлийг JUnit-ийн ерөнхий контекстоор танилцуулж байгааг заана уу. Гэсэн хэдий ч, програмуудын удирдамжаас харахад хүрээ нь ялалтад хүрэхэд хялбар байдаг, нэмэлт боломжууд тийм ч их биш боловч дүрэм журам, эхлүүлэгчээс цааш өргөжүүлэх боломжтой юм.

PZ-ийн хөгжил нь илүү их, бага ажил гэдгийг би мэднэ. Би өдөр бүр илүү сайн байхыг хичээдэг дархантай ажилладаг. Хүн бүрийн хувьд хамгийн хялбар арга бол спратыг мэдэх явдал юм сайн хэрэгсэлДараагийн хоолны талаархи зөвлөгөө:

  • Би ялсан X хэрэгсэл буруутай бол?
  • Ялсан X хэрэгсэлд би яаж буруутай вэ?

Автоматжуулсан тест нь програм хангамжийн хөгжүүлэлтийн чухал хэсэг боловч програмистуудын блогт туршилтын хэрэгслүүдийн тухай гурван нийтлэл байдаг. Яагаад, би танд "хэрэгслүүдтэй дэлгэц"-ийг харахыг зөвшөөрнө үү. Би та нарт 12 номын сан, фреймворкийн талаар хэлж өгөх болно, тухайлбал би нэгж болон интеграцийн тест бичихэд зориулсан хакердсан хүн гэх мэт, мөн би танд зарим талаар туслах болно, ингэснээр тэдгээрийг хэрхэн хакердах талаар ойлгоход тань туслах болно.

Миний багажны хайрцагыг харцгаая

Үүнээс өмнө та хэрэгслүүдэд өгсөн тайлбарыг өөрчлөх боломжтой тул автоматаар интеграл болон нэгж тестийг ажиллуулж байгаа мэт нугалах тохиргоог хийх үүрэгтэй. Надад энэ сэдвээр 2 тэмдэглэл байна:

  • Maven-ийн интеграцийн тест нь бид өөр өөр лавлахууд дахь интеграци болон нэгжийн тестийн тусламжтайгаар Maven нугалах аргыг хэрхэн тохируулахыг тайлбарладаг.
  • Gradle Start: TestSets залгаастай нэгтгэх тест нь Gradle-д зориулсан эдгээрийг тайлбарладаг.

Одоо та миний багаж хэрэгслийг гайхшруулахад бэлэн байна. Би тэднийг ангиллаар нь хуваасан бөгөөд ингэснээр танд шилжихэд хялбар болно.

Мөн интеграци болон нэгжийн туршилттай vicoous гэх мэт 12 хэрэгслийн тэнхлэг.

Ажиллаж байгаа тестүүд

AssertJ нь өршөөлийн тухай хатуу мэдэгдэл бичих уян хатан API-ээр хангадаг бөгөөд тестийн кодын уншигдах чадварыг сайжруулж, домэйн баримжаатай кинонуудад шаардлагатай бол бичсэн онцлог шинж чанаруудын тестийг дахин бичих боломжийг олгодог.

Додатково:

  • Туршилтын зорилгоор Hamcrest-ийг хакердаж, тест бичихийн тулд Hamcrest-ийг хэрхэн хакердаж, нэмэлт үндсэн модулиудын чадавхийг хэрхэн өргөжүүлэх вэ.
  • Бид AssertJ-д coristuvach-ын батламжийг бий болгох гэж байгаа мэт уг мэдэгдлийг хөгжлийн субьект баримжаатай хэл болгон хувиргадаг.
  • Бид цэвэрхэн бичдэг: хатуулгийг сэдэвт чиглэсэн уурхайгаар солих. Розповида, бид яагаад стандарт JUnit хатуулгийг ялалтын хэл, субьект баримжаатай хэл гэх мэт үгсээр солих буруутай юм.

Өгөгдлийн хандалтын кодын тест

Өгөгдлийн сангийн код нь жижиглэн худалдаалагчийн дотоод машин дээр ажилладаг интеграцийн тест бичихэд зориулагдсан.

JUnit-ийн өргөтгөл бөгөөд ингэснээр та арьсны интеграцийн туршилтыг хийж, мэдээллийн санг шаардлагатай мэдээллээр дүүргэхээс өмнө мэдээллийн санг эхлүүлэх хүсэлт гаргах боломжтой. DbUnit нь сул талуудтай ч тестийн өгөгдөл болон тестийн кодыг хуваалцах үндсэн хэрэгсэл юм.

Додатково:

  • DbUnit-ийн үндсэн бүрэлдэхүүн хэсгүүд, нэмэлт DbUnit-тэй шаардлагатай бичих тестийн талаархи мэдлэгийг тайлбарладаг.
  • бичих 5 дүрэм шилдэг тестүүдөгөгдөлд нэвтрэх код.

Java - 1991 онд Sun Microsystems-ээс түгээсэн объект хандалтат, хүчтэй бичигдсэн хэлний програмчлал. Уг хэлийг анх Oak гэж нэрлэж, электроникийн программчлалд ашигладаг байсан бол сүүлдээ Java нэрээр нэрлэгдсэн. 1995 онд Java-ийн албан ёсны хувилбар нь илүү амжилттай болсон бөгөөд шинэ хэл гарсны дараа удалгүй Java нь серверийн нэмэлт програмуудыг хөгжүүлэх хэрэгсэл болгон хүчтэй байр сууриа эзэлсэн.

Бидний үед Java програм хангамж хөгжүүлэх бүх салбарт ялалт байгуулдаг - серверийн програмууд, ширээний програмууд, хэрэгслүүд, вэб нэмэлтүүд - бүх зүйлийг Java болон маргаантай технологийн тусламжтайгаар боловсруулж байна.

Java тестийн зорилтот үзэгчид

Java програмчлалын талаар хамгийн бага мэдлэгтэй илүү олон жижиглэн худалдаачдыг мэддэг болохыг нотлохын тулд Java-г туршиж үзээрэй. Жава хэлтэй ажиллах талаар сайн бодож чаддаггүй бөгөөд энэ талаар хамгийн бага анхааруулга авахыг хүсдэг хүмүүст зориулсан тест нь илүү баялаг байх болно. үндсэн ойлголтууд tsієї алдартай movi програмчлал. Түүнчлэн, энэхүү тест нь Java хэл сурах, мэдлэгээ нэгтгэх, VNZ-ээс салгах, бие даан хийх ажлын үр дүнд оюутнуудад танил байж болно.

Java тест рүү шилжүүлэх

Шалгалтанд тэнцэхээсээ өмнө та Java хэлний "өөрчлөх", "гогцоо", "арга" гэх мэт үндсэн ойлголтуудыг аль хэдийн мэддэг бөгөөд орчин үеийн үндсэн бүтцийн синтаксийг мэддэг. Хэрэв тийм биш бол бид таныг анхан шатны хичээлийг уншиж Java хэлний үндсийг сурахыг зөвлөж байна.

Java тестийн бүтэц

"Java - Үндэс" тест нь дараах сэдвүүдийг хамарна.

Хоолны шинжилгээний сэдвүүдийн талаархи тайланг та доороос уншиж болно.

  • Тухайн ангийн объектууд: тухайн сэдвийн хоолыг анги, анги (объект) -ийн жишээ, зохион байгуулагчид, анги руу чиглэсэн талбарын аргууд гэж ойлгогдох байдлаар тусгасан болно.
  • Синтакс: Энэ хэлтсийн хүч нь шилжих түлхүүр үгс, операторууд, үндсэн төрлүүд (командууд, тэмдэгтүүд), хянах бүтэц (if-else, while, for), түүнчлэн боловсруулалтын талаарх ойлголтыг шалгах явдал юм. буруутай нөхцөл байдлын тухай (Үл хамаарах).
  • Үүнээс гадна: tsey razdіl өс хонзон суурь, нэр томьёо, товчлол, ангиудыг нэрлэх конвенц, өөрчлөлт, аргуудыг ойлгох. Мөн түгээлт бүрийн хувьд бид өөр өөр файлууд (.java, .class, .jar) болон багцуудын нийлүүлэлт, объектуудын амьдралын мөчлөг, хадгалах цуглуулгыг хардаг.

Онлайн Java шалгалт өгөх нь таныг Java-н үндсүүдийн талаарх мэдлэгээ хянаж, нэгтгэхээс гадна Java тестийн салбаруудаас эвхэгддэг тестүүдийг авах боломжийг танд олгоно.

Итгэцгээе Данийн тестчи харааж, уйлах болно.

Java тестийн цаашдын хөгжил

Java тест нь шинэ хоолоор байнга шинэчлэгдэж байдаг.

Quizful багийн хамгийн ойрын төлөвлөгөө бол Java хэл дээр шинжээчийн түвшний тест хийх явдал юм. Java Puzzlers тестийг бий болгох боломжтой боловч харамсалтай нь энэ нь хоол хүнсийг санагдуулах болно.

Хэрэв та зуурмагийн тэжээллэг чанарыг хүндэтгэдэг бол ерөнхийдөө бидэнд бичээрэй. Аз жаргалтай байгаарай.

Java програмистуудад зориулсан тестийн даалгавруудыг хайж олохын тулд би тэдгээрийг cicavia сайт руу илгээсэн ( Користувачам Авастбитгий яв, энэ бол скрипт троян, тэгэхгүй бол та чадна) - http://www.betterprogrammer.com. Тэгвэл Java програмистуудын ур чадварыг хамгийн энгийн аргаар олж ав автоматаар: хөдөлж буй нугалах функцуудыг (арга) нэн даруй бичиж, TextArea-д кодыг хуулна. Бид хөдөлгүүрийг сайтад даалгавруудтай ажиллахын тулд өгсөн (өөрөөр нэгжийн тест гэхгүй), "амтлаг чанар" гэсэн шалгуурын дагуу эхний мэргэшлийн индексийг тооцоолж, дараах байдлаар харагдуулна.

Дали pochinayutsya хоол. Би өөрөө амьдралдаа гэнэт Java хэлээр программчилсан (мөн энэ даалгаврыг зүгээр л алгассан) тул тестийн 82% нь тэнцүү гэж тооцогддог. java бус програмист. Java Junior, Java Programmer, ялангуяа Java Senior гэж бичихэд хичнээн кредит хэрэгтэй вэ?! Ямар үр дүнд хүрсэн бэ зөв Java программист - 90, 95, 99? Одоо харин бути шиг, "програмист" шиг 82-оос доош бичдэг, гэхдээ тэр робот шиг дүр эсгэж байгаа юм биш үү?!

Гар утасны хавсралт