Avatar billede prom Nybegynder
07. juni 2002 - 15:00 Der er 3 kommentarer og
3 løsninger

Junit og private metoder

Så er jeg her igen med endnu at vidunderligt JUnit spørgsmål.

Selv om mine spørgsmål ikke er så forfærdelig mange point værd, ser det ud til at det er disky der skal rende med dem allesammen.

Nå... Hvordan tester jeg metoder der har private adgang?.... Testklassen har jo ikke adgang til metoderne?....

prom
Avatar billede kezzelski Nybegynder
07. juni 2002 - 15:20 #1
Private klasser bliver på en eller anden måde brugt internt i klassen, så det er bare at teste den indirekte. fx hvis en constructor i en klasse bruger en privat funktion kan den testes ved at oprette en instans af klassen!

Mvh. Kezzel
Avatar billede soelvpil Nybegynder
07. juni 2002 - 16:06 #2
Hvis alle offentligt tilgængelige metoder virker som de skal, betyder det jo indirekte også, at alle de private også virker som de skal. Så du tester dem altså kun indirekte.

Hvis de er meget kritiske, kan du evt overveje at give metoden package access (normal standard er at lægge testklasser i de samme pakker som den kode de tester, så de også har adgang til f.eks. protected metoder). Det er dog en lidt "grim" løsning, som kun bør vælges, hvis det er strengt nødvendigt.
Avatar billede disky Nybegynder
07. juni 2002 - 21:19 #3
jeg stemmer på kezzelski's løsningen, den med package access, giver for meget arbejde bagefter og sikre ikke at softwaren virker bagefter.
Avatar billede prom Nybegynder
07. juni 2002 - 22:27 #4
I dette tilfælde bruges de private metoder i en actionListener:

gui.getDownloadButton().addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e){
    getDownload(downloadInterface, tableModel, destination);
  }
});

Den kan jeg vel ikke bare teste?.... I givet fald hvordan gør jeg?....

getDownload() bruger 5 forskellige private metoder, som jeg gerne ville teste adskilt.

Man kan måske argumentere for at getDownload() ikke skal være private men protected, da det jo kan tænkes at klasser der extender denne klasse har brug for at få adgang til de forskellige private metoder.
Måske medfører arbejdet med JUnit at jeg prøver at strukturere koden lidt bedre, og tænker mere over hvilken accessgrad mine metoder skal have.

prom
Avatar billede conrad Nybegynder
08. juni 2002 - 04:42 #5
Avatar billede prom Nybegynder
08. juni 2002 - 10:47 #6
Tak for svarene. Conrads løsning tror jeg er den bedste, jeg skal dog bruge lidt tid på at sætte mig ind i den. Kildekoden løsningen præsenterer, er mig en smule langhåret.

prom
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester