Torna indietro   Hardware Upgrade Forum > Software > Programmazione

BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX ha portato sul mercato Picco, un e-reader da 3,97 pollici che pesa 58 grammi e si aggancia al retro dello smartphone con un anello magnetico. Lo abbiamo usato con Pixel 11 Pro XL e iPhone 18 Pro per capire se un formato così ridotto regga la prova della lettura quotidiana
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max mette un pannello IPS da 13 pollici con risoluzione 2,5K e refresh a 120 Hz davanti a una batteria da 10.100 mAh e a quattro altoparlanti. Il listino parte da 399,90 euro, per un progetto molto chiaro e ambizioso: schermo ampio, buon audio e giornate lontano dalla presa, a un prezzo che non pesa sul portafoglio
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: 2795
[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: 2795
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: 2795
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: 2795
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


BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone BOOX Picco: l'ebook reader minuscolo è un...
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
Lotus avrà un V8 ibrido da 670 CV...
IBM: solo il 26% delle imprese dimostra ...
Hacker contro hacker e danni per 740.000...
Xiaomi SkyNomad, boom da 27.147 auto in ...
Logitech concede un giorno di ferie ai s...
Amazon, questi mini PC hanno un display ...
BYD prepara una rivale di smart #2? Il b...
Amazon, 3 robot tagliaerba ECOVACS GOAT ...
La cifratura di WhatsApp e Signal funzio...
Motori elettrici cinesi contro quelli oc...
Windows e macOS sono già vecchi? ...
Sony WH-1000XM5 a 168€ su Amazon: costan...
AliExpress, questo monitor KTC da 27'' &...
TikTok come porta d'ingresso a OnlyFans,...
La Terra ha una mini-luna temporanea: ec...
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: 16:48.


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