JavaRush /Блоги Java /Random-TG /JUnit барои JavaRush ё каме дар бораи санҷиш дар хона.
Sdu
Сатҳи

JUnit барои JavaRush ё каме дар бораи санҷиш дар хона.

Дар гурӯҳ нашр шудааст
Барои санҷидани вазифаи худ даҳҳо маротиба аз чоп кардани маълумоти санҷишӣ ба консол хаста шудаед? Хуш омадед ба гурба, ман ба шумо мегӯям, ки шумо бо он чӣ кор карда метавонед. Ҳадафи ниҳоии ин мавод автоматикунонии оғози вазифаи ҳалшаванда бо параметрҳои гуногун ва тафтиши натиҷаҳо бидуни ворид кардани тағирот ба codeи ибтидоии он хоҳад буд. Тавре ки шумо аллакай аз унвон фаҳмидед, ёрдамчии асосии мо дар ин масъалаи хеле содда JUnit хоҳад буд . Агар шумо то ҳол дар бораи санҷиши воҳидҳо ва санҷишҳои воҳидҳо нашунида бошед , ман тавсия медиҳам, ки каме танаффус гиред ва бо ин мафҳумҳо шинос шавед, хушбахтона дар Интернет маълумоти кофӣ мавҷуд аст. Не, шумо намехоҳед? Хуб, хуб, ман фикр мекунам, ки ин барои фаҳмидани он чизе, ки рӯй дода истодааст, мушкor калон нахоҳад буд. Охир, шумо медонед, ки имтихон ва умуман имтихон чист? Шумо ин корро ҳар дафъае, ки шумо вазифаи худро оғоз мекунед, маълумоти ибтидоиро ворид кунед ва натиҷаи натиҷаро бо он чизе, ки интизор будед, муқоиса кунед.
Салом, ҷаҳони JUnit!
JUnit чист? Дар вебсайти расмии лоиҳа мо метавонем тавсифи зеринро хонем:
JUnit як чаҳорчӯбаи оддӣ барои навиштани санҷишҳои такроршаванда мебошад. Ин як намунаи меъмории xUnit барои чаҳорчӯбаи санҷиши воҳидҳо мебошад.
Барои мо, ин қобorяти навиштани синфҳои махсус тарҳрезишударо дорад, ки усулҳои онҳо бо барномаи мо ҳамкорӣ мекунанд, натиҷаи натиҷаро бо истинод муқоиса мекунанд ва агар онҳо мувофиқат накунанд, ба мо хабар диҳед. Барои фаҳмидани принсип, як мисоли оддиро дида бароед. Фарз мекунем, ки мо синфи ёрирасон дорем, ки яке аз усулҳои он ду тағирёбандаи навъи int-ро мегирад ва маблағи онҳоро бармегардонад: JUnit барои JavaRush ё каме дар бораи санҷиш дар хона.  - 1 Ин функсияест, ки мо кӯшиш мекунем санҷида шавад. Хушбахтона, IDEA-и дӯстдоштаи мо аллакай ҳама чизеро дорад, ки шумо барои зуд сохтани санҷишҳо лозим аст, танҳо ба мо лозим аст, ки курсорро дар сатри эъломияи синф ҷойгир кунем, "Alt + Enter" -ро пахш кунед ва дар менюи контекстӣ "Сохтани тест" -ро интихоб кунед: JUnit барои JavaRush ё каме дар бораи санҷиш дар хона.  - 2 Пас аз он ки шумо дар куҷо муайян кунед. шумо бояд санҷиш эҷод кунед, IDEA интихоби китобхонаи санҷиширо пешниҳод мекунад (дар ин мавод ман JUnit4-ро истифода мебарам; барои пайваст кардани синфҳои китобхона ба лоиҳа шумо бояд тугмаи "Ислоҳ" -ро пахш кунед), усулҳои санҷидашуда ва иловагӣ имконоти. JUnit барои JavaRush ё каме дар бораи санҷиш дар хона.  - 3 IDE як қолаби синфи санҷишро эҷод мекунад: ClassName = TestClassName + "Test" MethodName = "test" + TestMethodName JUnit барои JavaRush ё каме дар бораи санҷиш дар хона.  - 4 Мо танҳо бояд матни методро пур кунем. Усулҳои ба истилоҳ "Тасдиқҳо" , ки аз ҷониби JUnit пешниҳод шудаанд , ба ин кӯмак мекунанд . Ба таври содда кори онҳо чунин менамояд: натиҷаи интизорӣ ва натиҷаи даъвати усули санҷидашуда ба усули .assert* интиқол дода мешавад; барои роҳат шумо метавонед ҳамчун параметри аввал паёми фаҳмондадиҳиро илова кунед. Агар параметрҳо ҳангоми санҷиш мувофиқат накунанд, ба шумо дар ин бора хабар дода мешавад. Шумо метавонед синфи санҷиширо барои иҷро ба мисли синфи муқаррарӣ оғоз кунед, ман бартарӣ медиҳам комбинатсияи калидҳои Ctrl+Shift+F10 JUnit барои JavaRush ё каме дар бораи санҷиш дар хона.  - 5
Вазифаро муайян мекунем
Дар назария, ҳама чиз оддӣ ва зебо аст, аммо дар заминаи мисоли пешниҳодшуда, ин аслан лозим нест; мо метавонем ба компютер бовар кунем, ки ду рақам илова кунад. Мо бештар ба он таваҷҷӯҳ дорем, ки кор бо мушкилоти воқеие, ки донишҷӯёни JavaRush ҳал мекунанд, чӣ гуна хоҳанд буд; масалан, ман пешниҳод мекунам, ки сатҳи маҳбуби 05.lesson12.bonus03-ро бигирем.
/* Масъала оид ба алгоритмҳо Программае нависед, ки: 1. аз консол адади N > 0-ро ворид кунад 2. баъд аз консол N ададро ворид кунад 3. максималии N рақами воридшударо намоиш диҳад. */
Мо бояд се санҷиш нависем, барои рақамҳои мусбат, манфӣ ва маҷмӯи омехта.
Дуртар ба ҷангал...
Дар ин ҷо моро сюрпризҳо интизоранд: public class UtilApp { public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); //напишите здесь ваш code int n; int maximum; /* Конечно же я не буду размещать решение задачи ;) Код приведенный тут переработан для наглядности, и не в коем случае не означает что он должен присутствовать в "правильном решении" */ System.out.println(maximum); } }
  • Мантиқи барнома дар усули main() ҷойгир карда шудааст
  • Маълумоти манбаъ ба усул интиқол дода намешавад, балки аз клавиатура ворид карда мешавад.
  • Усули main() натиҷаро барнамегардонад, балки онро ба консол медиҳад.
Агар нуктаи аввал махсусан мушкил набошад (мо метавонем усули асосии()-ро маъмулан номида тавонем), пас ду нуктаи навбатӣ моро маҷбур мекунанд, ки ба мавзӯъ амиқтар ворид шавем ва майнаамонро фишор оварем. Ман якчанд роҳи ҳалли мушкилотро ёфтам:
  1. Гузаронидани мантиқ барои дарёфти ҳадди аксар ба усули алоҳида.
    • Тарафдор: Муносибати дуруст дар робита ба рефакторинг
    • Камбудиҳо: Барнома бо рамз, сохторҳои нолозим пур мешавад, ҳадди аққал массив ё ArrayList илова карда мешавад (вобаста ба таъм ва ранг ...). Танҳо механизми дарёфти ҳадди аксар санҷида мешавад, вуруд ва баромади маълумот тафтиш карда намешавад.
  2. Навиштани бастабандӣ барои System.in/System.out.
    • Тарафдор: Мо китобхонаҳои тарафи сеюмро истифода намебарем.
    • Камбудиҳо: Роҳ барои шурӯъкунандагон нест. Мушкorи нисбии татбиқи санҷиш; миқдори рамз дар санҷиш метавонад аз супориши санҷидашуда зиёдтар бошад.
  3. Истифодаи китобхонаҳои иловагӣ барои санҷишҳо.
    • Тарафдор: Рамзи тоза дар санҷишҳо, осонии нисбии навиштани тест. Рамзи ибтидоии синфе, ки мавриди санҷиш қарор дорад, тағир дода нашудааст.
    • Камбудиҳо: Барои пайваст кардани китобхонаҳои тарафи сеюм ба лоиҳа.
Рости гап, ба ман варианти сеюм бештар писанд омад, биёед кӯшиш кунем, ки онро амалӣ созем.
Қоидаҳои система
Ҷустуҷӯи кӯтоҳ маро ба саҳифаи http://stefanbirkner.github.io/system-rules/ бурд ва дарҳол маълум шуд, ки ин ба ман лозим буд.
Маҷмӯаи қоидаҳои JUnit барои санҷиши code, ки java.lang.System-ро истифода мебарад.
Пас, биёед китобхонаро зеркашӣ кунем . Китобхонаи Commons IO- ро зеркашӣ кунед , ки барои кор кардани қоидаҳои система зарур аст . Мо ҳарду китобхонаро ба лоиҳаи худ пайваст мекунем (Файл -> Сохтори лоиҳа -> Китобхонаҳо -> + -> Java) ва ҳайкалтарошӣ оғоз мекунем: Пас аз оғоз, вазифаи мо аз шумо хоҳиш мекунад, ки рақамҳои N+1-ро аз консол ворид кунед, ки рақами аввал ба шумо мегӯяд. чй кадар ракамхо аз паси у меоянд. Дар Қоидаҳои Система, синфи TextFromStandardInputStream барои ин мақсадҳо истифода мешавад.Дар аввал мо бояд майдони ин намудро ба синфи санҷишии худ илова кунем ва онро бо шарҳи @Rule қайд кунем: @Rule public final TextFromStandardInputStream systemInMock = emptyStandardInputStream(); Сипас, бевосита дар усули тест мо маълумоти заруриро нишон медиҳем: systemInMock.provideText("4\n2\n6\n1\n3\n"); Тавре ки шумо мебинед, рақамҳо дар шакли матн интиқол дода мешаванд ва бо сатри дефис "\n" ҷудо карда мешаванд. Дар асоси ин, маълум мешавад, ки N ба 4 баробар мешавад ва мо аз рақамҳои {2, 6, 1, 3} максимумро меҷӯем. Баъдан, мо бояд як мисоли синфи зери санҷишро эҷод кунем ва усули main() -ро даъват кунем. Барномаи мо маълумотро аз systemInMock мехонад, коркард мекунад ва натиҷаро чоп мекунад ва мо танҳо бояд онро хонем ва бо стандарт муқоиса кунем. Барои ин, қоидаҳои система ба мо синфи StandardOutputStreamLog медиҳанд. Мо майдони навъи муайяншударо илова мекунем: @Rule public final StandardOutputStreamLog log = new StandardOutputStreamLog(); Шумо метавонед маълумоти чопшударо бо истифода аз усули .getLog() хонед, дар ҳоле ки ба шумо лозим аст, ки мавҷудияти аломатҳои сатри навро ба назар гиред, имконоти ниҳоӣ метавонанд чунин бошанд: assertEquals("{2, 6, 1, 3}, max = 6", "6", log.getLog().trim()); // or assertEquals("{2, 6, 1, 3}, max = 6", "6\r\n", log.getLog()); Дар байни санҷишҳо, барои аз қабати маълумот канорагирӣ кунед, шумо бояд сабтро тоза кунед log.clear(); Матни пурраи синфи санҷишии ман: import org.junit.Rule; import org.junit.Test; import org.junit.contrib.java.lang.system.StandardOutputStreamLog; import org.junit.contrib.java.lang.system.TextFromStandardInputStream; import static org.junit.Assert.*; import static org.junit.contrib.java.lang.system.TextFromStandardInputStream.emptyStandardInputStream; public class UtilAppTest { @Rule public final TextFromStandardInputStream systemInMock = emptyStandardInputStream(); @Rule public final StandardOutputStreamLog log = new StandardOutputStreamLog(); @Test public void testAddition() throws Exception { systemInMock.provideText("4\n2\n6\n1\n3\n"); UtilApp utilApp = new UtilApp(); utilApp.main(new String[]{}); assertEquals("{2, 6, 1, 3}, max = 6", "6", log.getLog().trim()); systemInMock.provideText("5\n-100\n-6\n-15\n-183\n-1\n"); log.clear(); utilApp.main(new String[]{}); assertEquals("{-100, -6, -15, -183, -1}, max = -1", "-1", log.getLog().trim()); systemInMock.provideText("3\n2\n0\n-1\n"); log.clear(); utilApp.main(new String[]{}); assertEquals("{2, 0, -1}, max = 2", "2", log.getLog().trim()); } } Мо оғоз мекунем ва лаззат мебарем. -=!!! МУҲИМ!!!=- Ин мавод ТАНҲО барои мақсадҳои иттилоотӣ пешниҳод карда мешавад; Ман ба озмоиши бомуваффақияти супориш дар server кафолат намедиҳам, агар дар бастаи супориш синфи бегона мавҷуд бошад. Пеш аз фиристодани супориш барои санҷиш ба server, ҳама чизи бегонаро хориҷ кунед: файлҳои нолозим, синфҳои нолозим, рамзи шарҳ додашуда. Анҷоми бомуваффақияти санҷишҳои эҷодкардаи шумо кафолати бомуваффақияти санҷишҳои serverро кафолат намедиҳад. Ман дидаву дониста маводи назариявиро хоидан накардам: назарияи санҷиши воҳидҳо, annotationҳои JUnit, assert ва ғайра, ҳама мавод дар истиноди дар матн овардашуда мавҷуданд. Шояд шумо роҳҳои санҷиши вазифаҳои худро дошта бошед, ман бо хушнудӣ онҳоро дар шарҳҳо бо шумо муҳокима мекунам.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION