Volania test metod vs. konstuktor
Zdravim konferenciu! Mam nasledovny problem. Pri testovani pomocou junit som zistil, ze ak ma trieda odvodena od TestCase viac testXxx metod, tak pred kazdym volanim takejto metody sa vola konstruktor danej triedy, co rezultuje vo vytvorenie viacerych instancii triedy TestCase (jej derivatu). Junit zrejme interne pre kazdu testXxx metodu vytvori interne instanciu triedy v ktorej je metoda deklarovana a potom invokuje metodu testXxx. Ocakaval som, ze na jendej instancii TestCase sa invokuju vsetky testXxx metody. Da sa toto chovanie junit-u nejako ovpyvnit? Diky, Bystro Horvath
Re: Volania test metod vs. konstuktor
Pred kazdym testom sa spusta setUp() a po nom tearDown(). Konstruktor by mal byt obligatny public TestClass(String name) { super(name); } Robite v konstruktore nieco viac? Preco Vam vytvaranie istancii pre kazdy test prekaza? I ked to vytvaranie sa mi nezda, ale vyvratit ho neviem, nikdy som sa tym nezaoberal. J. On Thu, Aug 18, 2005 at 09:01:30AM +0200, Horvath Bystrik wrote: > Zdravim konferenciu! > > Mam nasledovny problem. Pri testovani pomocou junit som zistil, ze ak ma > trieda odvodena od TestCase viac testXxx metod, tak pred kazdym volanim > takejto metody sa vola konstruktor danej triedy, co rezultuje vo vytvorenie > viacerych instancii triedy TestCase (jej derivatu). Junit zrejme interne pre > kazdu testXxx metodu vytvori interne instanciu triedy v ktorej je metoda > deklarovana a potom invokuje metodu testXxx. Ocakaval som, ze na jendej > instancii TestCase sa invokuju vsetky testXxx metody. Da sa toto chovanie > junit-u nejako ovpyvnit? > > Diky, > Bystro Horvath
Re: Volania test metod vs. konstuktor
On Thursday 18 of August 2005 09:01, Horvath Bystrik wrote: > Zdravim konferenciu! > > Mam nasledovny problem. Pri testovani pomocou junit som zistil, ze ak ma > trieda odvodena od TestCase viac testXxx metod, tak pred kazdym volanim > takejto metody sa vola konstruktor danej triedy, co rezultuje vo vytvorenie > viacerych instancii triedy TestCase (jej derivatu). Junit zrejme interne > pre kazdu testXxx metodu vytvori interne instanciu triedy v ktorej je > metoda deklarovana a potom invokuje metodu testXxx. Ocakaval som, ze na > jendej instancii TestCase sa invokuju vsetky testXxx metody. Da sa toto > chovanie junit-u nejako ovpyvnit? Nejjednodussi je podivat se do zdrojaku, jestli je tam nejaka properta. Ale jinak ja pouzivam klasicky single-init design pattern, tedy prazdne konstruktory (pouze super(...) ) a private static boolean first = true; public void setUp() { if (first) { first = false; ... } ... } Diky seqencnosti junitu neni treba synchronizovat. -- Oto 'tapik' Buchta, [EMAIL PROTECTED] QA Engineer, Systinet Corp, http://www.systinet.com
RE: Volania test metod vs. konstuktor
Vzhledem k tomu, ze u JUnitu stejne neni definovano, v jakem poradi se testMetody pousti, prislo by mi jako cistsi a citelnejsi si udelat jen jednu testMetodu a v ni si volat svoje testy, ktere uz nebudou mit prototyp "public void testBlaBla()". Mnohem lip pak muzu zachazet i se stavem objektu, pokud ho potrebuju atp. Metody fail, assertTrue atp. muzete pouzivat vesele dal. Jedina nevyhoda, kterou ted vidim, je ta, ze pokud ve firme mate metriku na pocet testu, pak takto vytvarene testy se v ni neprojevi. :) V. > -Original Message- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On > Behalf Of Oto Buchta > Sent: Thursday, August 18, 2005 9:51 AM > To: Java > Subject: Re: Volania test metod vs. konstuktor > > On Thursday 18 of August 2005 09:01, Horvath Bystrik wrote: > > Zdravim konferenciu! > > > > Mam nasledovny problem. Pri testovani pomocou junit som zistil, ze ak ma > > trieda odvodena od TestCase viac testXxx metod, tak pred kazdym volanim > > takejto metody sa vola konstruktor danej triedy, co rezultuje vo > vytvorenie > > viacerych instancii triedy TestCase (jej derivatu). Junit zrejme interne > > pre kazdu testXxx metodu vytvori interne instanciu triedy v ktorej je > > metoda deklarovana a potom invokuje metodu testXxx. Ocakaval som, ze na > > jendej instancii TestCase sa invokuju vsetky testXxx metody. Da sa toto > > chovanie junit-u nejako ovpyvnit? > > Nejjednodussi je podivat se do zdrojaku, jestli je tam nejaka properta. > Ale > jinak ja pouzivam klasicky single-init design pattern, tedy prazdne > konstruktory (pouze super(...) ) a > > private static boolean first = true; > public void setUp() { > if (first) { >first = false; >... > } > ... > } > > Diky seqencnosti junitu neni treba synchronizovat. > -- > Oto 'tapik' Buchta, [EMAIL PROTECTED] > QA Engineer, Systinet Corp, > http://www.systinet.com
Re: Volania test metod vs. konstuktor
My jsme ty inicializacni veci, ktere by se mely spustit jednou, zacali delat ve statickem bloku te testovaci tridy. Honza Dvorak Jozef Babjak wrote: Pred kazdym testom sa spusta setUp() a po nom tearDown(). Konstruktor by mal byt obligatny public TestClass(String name) { super(name); } Robite v konstruktore nieco viac? Preco Vam vytvaranie istancii pre kazdy test prekaza? I ked to vytvaranie sa mi nezda, ale vyvratit ho neviem, nikdy som sa tym nezaoberal. J. On Thu, Aug 18, 2005 at 09:01:30AM +0200, Horvath Bystrik wrote: Zdravim konferenciu! Mam nasledovny problem. Pri testovani pomocou junit som zistil, ze ak ma trieda odvodena od TestCase viac testXxx metod, tak pred kazdym volanim takejto metody sa vola konstruktor danej triedy, co rezultuje vo vytvorenie viacerych instancii triedy TestCase (jej derivatu). Junit zrejme interne pre kazdu testXxx metodu vytvori interne instanciu triedy v ktorej je metoda deklarovana a potom invokuje metodu testXxx. Ocakaval som, ze na jendej instancii TestCase sa invokuju vsetky testXxx metody. Da sa toto chovanie junit-u nejako ovpyvnit? Diky, Bystro Horvath
RE: Volania test metod vs. konstuktor
Tiez ma napadlo robit to staticky, inac asi to neobidem Bystro Horvath -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jan Dvořák Sent: Thursday, August 18, 2005 10:14 AM To: Java Subject: Re: Volania test metod vs. konstuktor My jsme ty inicializacni veci, ktere by se mely spustit jednou, zacali delat ve statickem bloku te testovaci tridy. Honza Dvorak Jozef Babjak wrote: >Pred kazdym testom sa spusta setUp() a po nom tearDown(). Konstruktor >by mal byt obligatny > >public TestClass(String name) { > super(name); >} > >Robite v konstruktore nieco viac? Preco Vam vytvaranie istancii pre kazdy >test prekaza? I ked to vytvaranie sa mi nezda, ale vyvratit ho neviem, >nikdy som sa tym nezaoberal. > >J. > > >On Thu, Aug 18, 2005 at 09:01:30AM +0200, Horvath Bystrik wrote: > >>Zdravim konferenciu! >> >>Mam nasledovny problem. Pri testovani pomocou junit som zistil, ze ak ma >>trieda odvodena od TestCase viac testXxx metod, tak pred kazdym volanim >>takejto metody sa vola konstruktor danej triedy, co rezultuje vo vytvorenie >>viacerych instancii triedy TestCase (jej derivatu). Junit zrejme interne pre >>kazdu testXxx metodu vytvori interne instanciu triedy v ktorej je metoda >>deklarovana a potom invokuje metodu testXxx. Ocakaval som, ze na jendej >>instancii TestCase sa invokuju vsetky testXxx metody. Da sa toto chovanie >>junit-u nejako ovpyvnit? >> >>Diky, >>Bystro Horvath >>
Re: Volania test metod vs. konstuktor
On Thursday 18 of August 2005 10:03, Vit Novak wrote: > Vzhledem k tomu, ze u JUnitu stejne neni definovano, v jakem poradi se > testMetody pousti, prislo by mi jako cistsi a citelnejsi si udelat jen > jednu testMetodu a v ni si volat svoje testy, ktere uz nebudou mit prototyp > "public void testBlaBla()". Mnohem lip pak muzu zachazet i se stavem > objektu, pokud ho potrebuju atp. > Metody fail, assertTrue atp. muzete pouzivat vesele dal. > > Jedina nevyhoda, kterou ted vidim, je ta, ze pokud ve firme mate metriku na > pocet testu, pak takto vytvarene testy se v ni neprojevi. :) Sorry, ale toto je tezky nonsence. Nejde ani o metriku, ale o to, ze likvidujete paralelismus pri vyvoji a, coz je dulezitejsi, z toho, ktere testy prosly a ktere ne lze mnohem lepe vyvodit kde nastala chyba. Navic pri rozumnych nazvech testu pak vite, co jste uz otestovali a co ne. Ja typicky pred implementaci kazde featury napisu do testu patricne tridy metodu public void testNovaFeatura() { throw new UnsupportedOperationException("To be implemented");//TODO } (uz mam na to sablonu v IDEI ;-) ) A pokud se nechci spolehnout na to, ze JUnit funguje tak, ze zavola metody tridy tak, jak jsou po sobe napsane ve zdrojaku, pouzivam nasledujici konstrukci: /** * Initialize suit. */ public static Test suite() { // ensure the test sequence TestSuite retval = new TestSuite(); retval.addTest(new MyTest("testHeadDirNonexistent")); retval.addTest(new MyTest("testGetDirNonexistent")); retval.addTest(new MyTest("testAppendDirNonexistent")); retval.addTest(new MyTest("testDeleteDirNonexistent")); return retval; } public static void main(String args[]) { TestRunner.run(suite()); } public MyTest(String name) { super(name); } A pokud potrebuju mit nejaky objekt v nejakem stavu, vzdy si ho znovu vytvarim a z inicialniho stavu jej v kazdem testu nastavim do stavu patricneho. Jinak nikdo nezaruci, co je v jakem stavu. A samozrejme v kazdem kroku nastaveni pouzivam JUnitove asserty... -- Oto 'tapik' Buchta, [EMAIL PROTECTED] QA Engineer, Systinet Corp, http://www.systinet.com
Re: Volania test metod vs. konstuktor
Myslim si, ze uplne najcistejsie riesenie podporuje samotny JUnit. Metoda "public static Test suite()" umoznuje nadefinovat poradie v akom sa budu testy spustat a statisticke informacie o vykonanych testoch (pocet atd.) budu zodpovedat realite. V pripade zaujmu si mozete pozriet prilozeny subor, ktory obsahuje ukazkovy kod. Ales Vit Novak wrote: Vzhledem k tomu, ze u JUnitu stejne neni definovano, v jakem poradi se testMetody pousti, prislo by mi jako cistsi a citelnejsi si udelat jen jednu testMetodu a v ni si volat svoje testy, ktere uz nebudou mit prototyp "public void testBlaBla()". Mnohem lip pak muzu zachazet i se stavem objektu, pokud ho potrebuju atp. Metody fail, assertTrue atp. muzete pouzivat vesele dal. Jedina nevyhoda, kterou ted vidim, je ta, ze pokud ve firme mate metriku na pocet testu, pak takto vytvarene testy se v ni neprojevi. :) V. -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Oto Buchta Sent: Thursday, August 18, 2005 9:51 AM To: Java Subject: Re: Volania test metod vs. konstuktor On Thursday 18 of August 2005 09:01, Horvath Bystrik wrote: Zdravim konferenciu! Mam nasledovny problem. Pri testovani pomocou junit som zistil, ze ak ma trieda odvodena od TestCase viac testXxx metod, tak pred kazdym volanim takejto metody sa vola konstruktor danej triedy, co rezultuje vo vytvorenie viacerych instancii triedy TestCase (jej derivatu). Junit zrejme interne pre kazdu testXxx metodu vytvori interne instanciu triedy v ktorej je metoda deklarovana a potom invokuje metodu testXxx. Ocakaval som, ze na jendej instancii TestCase sa invokuju vsetky testXxx metody. Da sa toto chovanie junit-u nejako ovpyvnit? Nejjednodussi je podivat se do zdrojaku, jestli je tam nejaka properta. Ale jinak ja pouzivam klasicky single-init design pattern, tedy prazdne konstruktory (pouze super(...) ) a private static boolean first = true; public void setUp() { if (first) { first = false; ... } ... } Diky seqencnosti junitu neni treba synchronizovat. -- Oto 'tapik' Buchta, [EMAIL PROTECTED] QA Engineer, Systinet Corp, http://www.systinet.com import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; public final class MyTestCase extends TestCase { public MyTestCase( String pName ) { super( pName ); } public void testFoo1() { System.out.println( "testFoo1()" ); } public void testFoo2() { System.out.println( "testFoo2()" ); } public void testFoo3() { System.out.println( "testFoo3()" ); } public static Test suite() { TestSuite testSuite = new TestSuite(); testSuite.addTest( new MyTestCase( "testFoo1" ) ); testSuite.addTest( new MyTestCase( "testFoo2" ) ); testSuite.addTest( new MyTestCase( "testFoo3" ) ); return testSuite; } //public static Test suite() //{ //TestSuite testSuite = new TestSuite(); // //testSuite.addTest( new MyTestCase( "testFoo2" ) ); //testSuite.addTest( new MyTestCase( "testFoo1" ) ); //testSuite.addTest( new MyTestCase( "testFoo3" ) ); // //return testSuite; //} //public static Test suite() //{ //TestSuite testSuite = new TestSuite(); // //testSuite.addTest( new MyTestCase( "testFoo1" ) ); //testSuite.addTest( new MyTestCase( "testFoo3" ) ); //testSuite.addTest( new MyTestCase( "testFoo2" ) ); // //return testSuite; //} }
Re: Volania test metod vs. konstuktor
On Thursday 18 of August 2005 11:01, Oto Buchta wrote: ... >public static void main(String args[]) { > TestRunner.run(suite()); > } ... Zapomnel jsem dodat import junit.textui.TestRunner; -- Oto 'tapik' Buchta, [EMAIL PROTECTED] QA Engineer, Systinet Corp, http://www.systinet.com