Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16-ak0001nl combina RTX 5080 Laptop e Ryzen AI 9 HX 375 in un desktop replacement potente e ben raffreddato, con display 240 Hz e dotazione completa. Autonomia limitata e calibrazione non perfetta frenano l'entusiasmo, ma a 2.609 euro è tra le proposte più interessanti della categoria.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-03-2010, 19:03   #1
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
[JAVA] JUnit: testare metodi privati

Sto iniziando a usare JUnit e mi chiedevo come dovrei fare per testare i metodi privati delle mie classi. Tra l'altro come conviene organizzare i TestCase e i TestSuite?
In questo momento ho un progetto con i seguenti package:

mhs
mhs.card
mhs.hand

Tanto per cominciare volevo creare un TestCase per la classe Card che è contenuta in mhs.card
Ingenuamente ho creato un package test.mhs.card e vi ho messo la classe CardTest che ora testa i metodi pubblici di Card. Vorrei però avere anche la possibilità di testare i metodi privati, solo che ovviamente non ho accesso ad essi da una classe esterna. Come dovrei procedere?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:05   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Stai usando un IDE particolare, che so, NetBeans?
Perchè in quel caso puoi semplicemente fare click tasto destro sulla classe per la quale vuoi creare lo unit test e nel menu contestuale trovi un voce apposita...
@EDIT: click destro -> Tools -> Create JUnit Test
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:11   #3
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
Grazie per la risposta. Sto usando Eclipse e c'è una voce simile ed è quella con cui ho creato la classe CardTest in test.mhs.card solo che come dicevo in questo modo non posso testare i metodi privati. In teoria dovrei fare una classe di test innestata in Card ma vorrei tenere separati i test da ciò che viene testato. Questo però è un vincolo che ingenuamente mi sono posto da solo, probabilmente bisogna ragionare in modo diverso. Tu in genere come procedi per creare le classi di test e dove le collochi nella struttura dei package?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:14   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Per quanto riguarda lo unit test, testare i metodi privati della classe sotto test non ha molto senso.
Leggi questo.

@EDIT:
Premessa: io uso NetBeans.
In questo IDE, le classi per lo unit test delle classi dell'applicazione vengono automaticamente create nello stesso package della classe da testare.
L'IDE poi, nella vista ad albero del progetto, tiene separata la visualizzazione delle classi vere e proprio da quelle di test tramite due diversi nodi di espansione.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 05-03-2010 alle 19:18.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:22   #5
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
Quindi molto probabilmente ho fatto un errore di progettazione... Ma è davvero così strano avere la necessità di testare un metodo privato se la progettazione è stata fatta come si deve? Potresti farmi qualche esempio?
E per quanto riguarda la posizione all'interno dei package secondo te va bene come ho fatto o è meglio mettere la classe di test e la classe testata nello stesso package?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:31   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Quindi molto probabilmente ho fatto un errore di progettazione... Ma è davvero così strano avere la necessità di testare un metodo privato se la progettazione è stata fatta come si deve? Potresti farmi qualche esempio?
Non lo so, non ho una esperienza sufficiente in fatto di Unit Test per dire qualcosa con cognizione di causa.
Al massimo posso fare un considerazione: lo Unit Test di una classe testa esattamente un sola classe.
I metodi privati di quella classe sono prima o poi chiamati internamente dai metodi pubblici/protected*/default della classe (i metodi privati di una classe non vengono nemmeno ereditati da eventuali sotto-classi: dunque non possono che essere chiamati da altri metodi della classe stessa).
Testando tutta l'interfaccia pubblica/protected*/default della classe, in pratica, copri anche i metodi privati.

Quando poi un test fallisce, sai esattamente quale metodo (pubblico) lo ha fatto fallire (e anche perchè). Non penso quindi ci sia questa neccesità di testare esplicitamente i metodi privati. (Se proprio devi ti tocca usare gli escamotage descritti nella faq che ho linkato).

* vedi qua sotto:

Quote:
Originariamente inviato da wingman87 Guarda i messaggi
E per quanto riguarda la posizione all'interno dei package secondo te va bene come ho fatto o è meglio mettere la classe di test e la classe testata nello stesso package?
Sempre in quella faq, domanda precedente a quella rimandata dal link.
Consigliano di metterli nello stesso package: in questo modo, dalla classe di test hai accesso anche hai metodi definiti con specificatore di accesso di default e protected (restano appunto "fuori portata" solamente quelli dichiarati private).
Il che giustifica anche il discorso fatto sopra.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 05-03-2010 alle 21:31. Motivo: corretta l'ultima affermazione.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:33   #7
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
Grazie, sei stato gentilissimo e mi hai tolto tutti i dubbi.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:36   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Grazie, sei stato gentilissimo e mi hai tolto tutti i dubbi.
You are welcome
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 22:23   #9
khelidan1980
Senior Member
 
L'Avatar di khelidan1980
 
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
come appunto ti hanno detto se hai la necessità di testare metodi privati potrebbe essere che ci sia qualcosa da sistemare in fase di progettazione comunque non è detto, alcuni metodi privati possono essere molto complessi e richiedere di essere testati singolarmente, io in genere uso la reflection per testare il metodi privati, se cerchi su google trovi esempi da cui prender spunto, non è complicato
__________________
Khelidan

Ultima modifica di khelidan1980 : 05-03-2010 alle 22:26.
khelidan1980 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 23:25   #10
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da khelidan1980 Guarda i messaggi
...
io in genere uso la reflection per testare il metodi privati, se cerchi su google trovi esempi da cui prender spunto, non è complicato
Posto un link (è il mio hobby preferito) ad un articolo interessante che illustra pro/contro di quattro possibili soluzioni per testare metodi privati:
Quote:
* Don't test private methods.
* Give the methods package access.
* Use a nested test class.
* Use reflection.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
La missione Artemis II con il razzo spaz...
Blue Origin propone di utilizzare Blue R...
Sora all'interno di ChatGPT: aumentano g...
L'Ufficio dell'Ispettore Generale ha ana...
Primo contatto con Volvo ES90: ammiragli...
La Cina potrebbe puntare con maggiore de...
Un clamoroso errore strategico: il nuovo...
Cos’è il nuovo cartello del "...
HP: gli attacchi con l'IA puntano su vel...
Acer compie 50 anni e si trasforma: dall...
La rete elettrica USA funziona solo a me...
La Corte Costituzionale albanese: 'Il ba...
Secondo trailer del nuovo anime di Ken i...
La guerra tra Russia e Ucraina arriva co...
KadNap: il botnet che ha infettato 14.00...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:27.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v