Closed ioseb closed 11 years ago
@revazi ძალიან ჩირგვში ხომ არ ჩაჯექი ისევ?
@ioseb ვერ ვიყავი კარგად საღამოს. არ ჩავმჯდარვარ ჩირგვში :rabbit:
@ioseb ტესტს შევცლვი ASAP :watch:
java.lang.IllegalArgumentException: wrong number of arguments
ვიფიქრე რომ პრობლემა აქ არის:
return Arrays.asList(new Object[][] რის შემდეგაც შევეცადე რაღაცების გამერკვია და გავიგე რომ JUnit იყენებს http://docs.oracle.com/javase/tutorial/reflect/index.html - Reflection API ს სადაც კონსტრუქტორი არის public შემდეგი სახის: ExampleParamTest(int i, String[] strings); ამიტომ ვიფიქრე რომ შეცდომას ასეთი რაღაც გამოასწორებდა
{
0,
new String[]{
"GET /path/to/resource HTTP/1.1",
HttpMethod.METHOD_GET,
"/path/to/resource",
"",
"",
HTTP_VERSION
}
}
თუმცა შევცდი და ახლა იქნებ რამენაირად დამეხმაროთ @ioseb
@revazi მუშა კოდი დაგიდე. არ მითქვია არასწორად გადაწერეთქო. ის კოდი რაც დავდე მუშაა. როგორმე გამოაგენი და გაასწორე.
@ioseb გავასწორე უკვე
:D :D :D რაში იყო პრობლემა?
On Wednesday, March 6, 2013 at 3:56 PM, Revaz wrote:
@ioseb (https://github.com/ioseb) გავასწორე უკვე
— Reply to this email directly or view it on GitHub (https://github.com/reflooding/serv-cst/issues/21#issuecomment-14495665).
:dancer: არ გეტყვი :D
კარგად შეინახე :))))))))))
On Wednesday, March 6, 2013 at 4:03 PM, Revaz wrote:
არ გეტყვი :D
— Reply to this email directly or view it on GitHub (https://github.com/reflooding/serv-cst/issues/21#issuecomment-14495903).
კლასის სახელში იყო პრობლემა
ჰმ… კარგია რომ დამოუკიდებლად გამოასწორე :როზგი:
On Wednesday, March 6, 2013 at 4:07 PM, Revaz wrote:
კლასის სახელში იყო პრობლემა
— Reply to this email directly or view it on GitHub (https://github.com/reflooding/serv-cst/issues/21#issuecomment-14496019).
:cactus: ტესტებს ჩავყრი ყველას და დავაკომიტებ
დააკომიტე მაშინ როდესაც ეგ ტესტები გაიმართება წესიერად და ყველაფერი იმუშავებს.
On Wednesday, March 6, 2013 at 4:09 PM, Revaz wrote:
ტესტებს ჩავყრი ყველას და დავაკომიტებ
— Reply to this email directly or view it on GitHub (https://github.com/reflooding/serv-cst/issues/21#issuecomment-14496088).
ხო ეგ ვიგულისხმე :v:
okay, ველოდები შედეგს.
On Wednesday, March 6, 2013 at 4:11 PM, Revaz wrote:
ხო ეგ ვიგულისხმე
— Reply to this email directly or view it on GitHub (https://github.com/reflooding/serv-cst/issues/21#issuecomment-14496196).
@revazi ვნახე რომ გადაწყობილხარ ამ ტესტებზე. ორი შეკითხვა:
ანუ ამეებს იმიტომ გეკითხები, რომ მხოლოდ კოდის წერა არ არის ჩვენთვის თვითმიზანი.
@ioseb
ნელ-ნელა ვსწავლობ როგორ უნდა ვიმუშავო კოდზე და ამასთან შენგან სწორ მიდგომებს ვგებულობ რაღაც ბუნდოვანებები ისევ მრჩება მაგრამ დრო და დრო შევეცდები ყველაფერში გავერკვე.
ამ იუნიტ ტესტს რაც შეეხება როგორც გადავაკეთეთ მომეწონა და მგონია რომ გავიგე კიდეც.
ოკეი :-)
On Wednesday, March 6, 2013 at 6:44 PM, Revaz wrote:
@ioseb (https://github.com/ioseb)
ნელ-ნელა ვსწავლობ როგორ უნდა ვიმუშავო კოდზე და ამასთან შენგან სწორ მიდგომებს ვგებულობ რაღაც ბუნდოვანებები ისევ მრჩება მაგრამ დრო და დრო შევეცდები ყველაფერში გავერკვე.
ამ იუნიტ ტესტს რაც შეეხება როგორც გადავაკეთეთ მომეწონა და მგონია რომ გავიგე კიდეც.— Reply to this email directly or view it on GitHub (https://github.com/reflooding/serv-cst/issues/21#issuecomment-14502491).
ერთი კითხვა მაქვს უცებ. @Parameters და @Tests ამათი კავშირი მოკლედ მითხარი რაღაც წარმოდგენა მაქვს უბრალოდ დავრწმუნდე მინდა.
@revazi ორივე არის JUnit - ის ანოტაციები. ანოტაციები გარკვეული მეტა ინფორმაციის დატვირთვას ატარებს ჯავაში. როდესაც ვწერთ ტესტებს და ვადებთ მაგ ანოტაციებს მეთოდებს(კლასებს ა.შ.) JUnit - ის შესრულების გარემო აღმოაჩენს შესაბამისად ანოტირებულ კლასებსა და მეთოდებს და უშვებს ტესტებს ავტომატურად.
როდესაც მეთოდს ვაწერთ ანოტაციას @Test ამითი JUnit - ს ვეუბნებით რომ ეს არის ტესტირების მეთოდი და იგი ამ მეთოდს იძახებს ჩვენთვის.
როდესაც კლასზე ვაკეთებთ ანოტაციას @RunWith(Parameterized.class) ამითი კიდევ დამატებით ინფორმაციას ვაწვდით JUnit - ს რომ გვინდა ამ კლასის შიგნით გამოყენებული პარამეტრიზებული მეთოდები გამოიყენოს ჩვენთვის საჭირო პარამეტრების გენერაციისთვის და მხოლოდ მას შემდეგ შეასრულოს ტესტები.
On Wednesday, March 6, 2013 at 6:48 PM, Revaz wrote:
ერთი კითხვა მაქვს უცებ.
@Parameters (https://github.com/Parameters) და @Tests (https://github.com/Tests) ამათი კავშირი მოკლედ მითხარი რაღაც წარმოდგენა მაქვს უბრალოდ დავრწმუნდე მინდა.— Reply to this email directly or view it on GitHub (https://github.com/reflooding/serv-cst/issues/21#issuecomment-14502726).
@ioseb :+1: გავიგე. შევასწორებ იმ რაღაცებს კიდევ და დავაკომიტებ.
ოკ
On Wednesday, March 6, 2013 at 6:55 PM, Revaz wrote:
@ioseb (https://github.com/ioseb) გავიგე. შევასწორებ იმ რაღაცებს კიდევ და დავაკომიტებ.
— Reply to this email directly or view it on GitHub (https://github.com/reflooding/serv-cst/issues/21#issuecomment-14503124).
საინტერესოაა , testHttpRequestLine()
მეთოდის გამოძახება ხდება რეალურად იმდენჯერ რამდენი ელემენტიცაა მასივში და კონსტრუქტორისთვის პარამეტრების გადაცემაც ავტომატურად გვარდება ..
ანოტაციების წყალობით ხდება ეს ყველაფერი . :cool: იმედია სწორად გავიგე :D
დემურ,
რამდენი ელემენტიც არის მასივში იმდენჯერ იქმნება ობიექტი და შესაბამისად გადაეცემა პარამეტრებად ქვემასივის ელემენტები. ამის შემდეგ იძახება ტესტ მეთოდი რომელსაც თავისთავად ცხადია ხელი მიუწვდება ობიექტის ცვლადებზე.
Sent from my iPhone
On Mar 6, 2013, at 10:17 PM, Demur Nodia notifications@github.com wrote:
საინტერესოაა , testHttpRequestLine() მეთოდის გამოძახება ხდება რეალურად იმდენჯერ რამდენი ელემენტიცაა მასივში და კონსტრუქტორისთვის პარამეტრების გადაცემაც ავტომატურად გვარდება .. ანოტაციების წყალობით ხდება ეს ყველაფერი . იმედია სწორად გავიგე :D
— Reply to this email directly or view it on GitHub.
@ioseb გასაგებია
@ioseb
queryString = (queryString != null) ? queryString : "";
fragmentString = (fragmentString != null) ? fragmentString : "";
requestLine.setQueryString(queryString);
requestLine.setFragment(fragmentString);
ამაზე რა აზრის ხარ :question:
@ioseb დავაკომიტო ასე :question:
აზრი? ცარიელი სტრიქონი ვის რად უნდა?
Sent from my iPhone
On Mar 6, 2013, at 11:17 PM, Revaz notifications@github.com wrote:
@ioseb
queryString = (queryString != null) ? queryString : ""; fragmentString = (fragmentString != null) ? fragmentString : ""; ამაზე რა აზრის ხარ?
— Reply to this email directly or view it on GitHub.
იხ. წინა პასუხი.
Sent from my iPhone
On Mar 6, 2013, at 11:42 PM, Revaz notifications@github.com wrote:
@ioseb დავაკომიტო ასე
— Reply to this email directly or view it on GitHub.
ის აზრი აქვს რომ სხვანაირად ტესტები warning-ს მაჩვენებს ანუ expected value fragmentString - თვის და queryStirng - თვის არის "" ცარიელი სტრიქონი და NULL - ზე :warning:
როდესაც expected value fragmentString და queryString-თვის არ არის "" მაშინ ყველაფერი რიგზეა თუარადა ცარიელი სტრიქონის მინიჭებით მოგვარდა პრობლემა და ალბათ რაღაც არ მესმის ნორალურად. :mag:
Warning არ არის შეცდომა, დაიკიდე ტესტებში.
Sent from my iPhone
On Mar 6, 2013, at 11:54 PM, Revaz notifications@github.com wrote:
ის აზრი აქვს რომ სხვანაირად ტესტები warning-ს მაჩვენებს ანუ expected value fragmentString - თვის და queryStirng - თვის არის "" ცარიელი სტრიქონი და NULL - ზე
— Reply to this email directly or view it on GitHub.
@revazi ბოდიში, არ მიმიწვდებოდა კომპზე ხელი ახლა მოვედი. აბა ამიხსენი წესიერად რომელი ქეისი იწვევს მაგას? კოდი დააკპირე რა აქ ასე ვერ ვიგებ მგონი მეც წესიერად.
ანუ ეს არის ჩვენი ტესტის ნიმუში
{
"GET /path/to/resource HTTP/1.1", // Request line to parse
HttpMethod.METHOD_GET, // Expected HTTP method
"/path/to/resource", // Expected Path
"", // Expected Query String
"", // Expected Fragment
HTTP_VERSION // Expected HTTP version
}
სადაც Expected Query String და Expected Fagment არის "" ამიტომ ამ ორ String - ს რომ ვხდით თავიდანვე null-ს არ აქვს მნიშვნელობა set-ს ვაკეთებთ თუ არა მაინც ერთი და იგივეს მიწერს
junit.framework.ComparisonFailure: null
Expected :
Actual :
@revazi
საფუძვლიანად ჩავუჯექი შენს ნამუშევარს და მინდა გაგახარო რომ ძირეულად გადასაწერი გვაქვს. ეგ ვორნინგი ადვილად მოგვარდებოდა თუ ამას "",
ჩავანაცვლებთ ამით null,
(ყველგან რა თქმა უნდა).
გარდა იმისა რომ შენს კოდში მნიშვნელოვანი ცვლილებები გვაქვს შესატანი, თვითონ ტესტებიც არასწორად გაქვს შედგენილი.
@ioseb მაგის თქმას ვცდილობდი რომ ყველა ტესტში უნდა შემეცვალა "",
ესენი null
ებით.
ტესტებში სხვა რა შეცდომაა?
@revazi ტესტებში გაქვს შეცდომები, მაგალითად:
აქ "?param=value",
კითხვის ნიშანი უბრალოდ გამყოფია. რა ესაქმება მანდ?
{
"GET /path/to/resource?param=value HTTP/1.1",
HttpMethod.METHOD_GET,
"/path/to/resource",
"?param=value",
"",
HTTP_VERSION
},
ასევე "?page=1"
არასწორია, კითხვის ნიშნით არ უნდა იწყებოდეს. კითხვის ნიშანი უბრალოდ გამოყოფია. იგივე ეხება "#" სიმბოლოს, იგი გამყოფია და რეზულტატში არაფერი ესაქმება:
{
"GET /forums/1/topics/2375?page=1#posts-17408 HTTP/1.1\r\n",
HttpMethod.METHOD_GET,
"/forums/1/topics/2375",
"?page=1",
"#posts-17408",
HTTP_VERSION
},
კიდევ არის რამდენიმე მასეთი ტესტი რომელიც არასწორია. შესაბამისად რადგან შენი პარსერი გადის ტესტირებას ამ არასწორი ტესტებით შენი პარსერიც არასწორად მუშაობს.
@revazi
მაგალითად ამ ტესტზე საერთოდ უნდა ჩაიჩეხოს შენი პარსერი და სინამდვილეში მუშაობს:
{
"GET /with_\"stupid\"_quotes?foo=\"bar\" HTTP/1.1\r\n\r\n",
HttpMethod.METHOD_GET,
"/with_\"stupid\"_quotes",
"?foo=\"bar\"",
"",
HTTP_VERSION
},
ამ ცვლადებზე:
private String queryString="";
private String pathString ="";
private String fragmentString = "";
უკვე მოგწერე რომ ლოკალური უნდა იყოსთქო და მაინც ობიექტის დონეზე დატოვე. დასკვნა: ჩემს კომენტარებს არ/ვერ კითხულობ. ისევ პრიმიტიულ "პრაგრამისტულ" შედეგზე ხარ ორიენტირებული.
@ioseb ანუ კითხვისნიშანი არ შედის queryString და არც #
ეს არ შედის fragmentString - ში?
არა სოსო არ დამიკომიტებია იმის მერე რაც მომწერე შევცვალე და შენგან ველოდებოდი პასუხებს როგორ უნდა მოგვეგვარებინა ეს პრობლემა შეცვლილი მაქვს
"პრაგრამისტული" შედეგი არ ვიცი რა არის :baby:
@revazi არა არ შედის. მოკლედ, ძალიან ვაფასებ რომ ბევრი იშრომე და ამ შრომამ(თუნდაც უარყოფითი შედეგით) პოზიტიური შედეგი მოგვცა ცოტა გაშინაურდი. ახლა საქმე რომ გავამარტივოთ მოაშორე URI - ს შენეული დახლეჩვის "ალგორითმი" და უფრო სწორი და საიმედო გზით წავიდეთ. გამოიყენე java.net.URI
კლასი. გაარჩიე კარგად(!) ისე არა რომ სანახევროდ გაიგო. და შეეცადე დააინტეგრირო შენს პარსერში. გადააშენე ეგ substring()
მეთოდები. შეგნებულად არ გითხარი მაგ კლასის არსებობის შესახებ აქამდე მინდოდა რომ გემუშავა შენით.
P.S. "პრაგრამისტული" შედეგი არის უბრალოდ შედეგი შედეგისთვის.
@ioseb
გადავაწყდი სადღაც მაგ java.net.URI
-ს მაგრამ არ მიმიქცევია ყურადღება. გავარჩევ დღეს.
დავაკომიტო ახლა ის რაც მაქვს?
@revazi მოკლედ სამი ამოცანა გვაქვს:
java.net.URI
კლასი."",
ჩაანაცვლე null,
- ით. როდესაც ამ ყველაფერს გააკეთებ მერე ტესტებიდან უნდა გამოარჩიო ის ნეგატიური ტესტები რომლებიც ცალკე უნდა გავიტანოთ, მაგ ტესტირების კლასში მხოლოდ პოზიტიური ტესტები უნდა დავტოვოთ.
დაკომიტებით არაფერი არ დააკომიტო, უამრავი საქმე გვაქვს. არავის არ ესაჭიროება ნახევარფაბრიკატები.
@ioseb გასაგებია.
@revazi სანამ შუბლით შეეჭიდები რამეს ჯერ დოკუმენტაცია წაიკითხე ყურადღებით: http://docs.oracle.com/javase/7/docs/api/java/net/class-use/URI.html
@ioseb ok :mag:
@revazi არ ჩათვალო რომ ცოტა საქმეა, საკმაოდ მოგიწევს ოფლის დაღვრა.
@ioseb შევეცდები ძირეულად გავარჩიო და დროშიც არ გავწელო
@revazi მოკლედ იმ შენიშვნებს რომ გაასწორებ რაც დაგიწერე კომენტარებში(ყურადღებით იყავი არ გამოგრჩეს რამე). შემდეგ განახორციელებ შენი ტესტების მოდიფიცირებას და ნაცვლად იმ უამრავი copy/paste ტესტ მეთოდისა გამოიყენებ ასეთ მიდგომას:
ეს არის პარამეტრიზებული უნიტ ტესტის ნიმუში რომელიც უნდა გამართო თავიდან ბოლომდე შენ.
getRequestLineData()
მეთოდი აბრუნებს გასატესტირებელი მოთხოვნის სტრიქონის კონფიგურაციას და საკმაოდ თვითაღწერადია. გადაიტანე ყველა შენი სატესტო მოთხოვნის სტრიქონი მაგ ფორმატში. ყურადღება რომ არ გაგეფანტოს, მასივის ქვემასივის შემადგენლობა ასეთია:სანამ რადიკალურ ქმედებებზე გადახვალ, გაითვალისწინე რომ მხოლოდ ერთი ტესტ მეთოდია საჭირო ამ შემთხვევაში დანარჩენზე JUnit იზრუნებს რომ კონფიგურაციის ყოველი ელემენტისთვის გამოიძახოს ეს ტესტი. იცოდე წუწაობა არ დაიწყო.